Linux 的 syslog 丢失通常不是“没写”,而是被丢弃、覆盖、缓冲、过滤或配置不当导致的。下面按最常见原因 → 排查思路 → 解决建议系统说明。
现代 Linux(CentOS 7+、Ubuntu 16+)默认用 systemd-journald,而传统 syslog 只是“消费者”。
常见现象:
journalctl 能看到日志/var/log/messages 或 /var/log/syslog 没有原因:
✅ 检查:
systemctl status rsyslog
journalctl -u rsyslog
✅ 解决:
systemctl enable --now rsyslog
并确保 rsyslog 加载 journal 模块:
module(load="imjournal")
systemd-journald 默认限速:
典型场景:
✅ 查看:
journalctl -u your_service
✅ 解决(临时):
# /etc/systemd/journald.conf
RateLimitInterval=0
RateLimitBurst=0
然后:
systemctl restart systemd-journald
rsyslog 也有 rate limit:
$SystemLogRateLimitInterval 0
$SystemLogRateLimitBurst 0
否则:
日志轮转(logrotate)后:
✅ 检查:
ps aux | grep rsyslog
lsof | grep deleted
✅ 解决:
systemctl reload rsyslog
或 logrotate 配置中加:
postrotate
/usr/bin/systemctl reload rsyslog
endscript
syslog 不会报错,直接写失败
✅ 检查:
df -h
df -i
✅ 解决:
rsyslog 默认可能忽略 debug / info
例如:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
→ debug 日志直接丢失
✅ 解决:
*.debug /var/log/debug.log
systemd 服务:
✅ 解决:
[Service]
StandardOutput=syslog
StandardError=syslog
或 rsyslog:
module(load="imjournal")
journal 有大小限制:
journalctl --disk-usage
默认:
✅ 调整:
# /etc/systemd/journald.conf
SystemMaxUse=1G
MaxRetentionSec=7day
systemctl status rsyslog
systemctl status systemd-journald
journalctl -u your_service
cat /etc/systemd/journald.conf
cat /etc/rsyslog.conf
df -h
df -i
✅ 生产环境推荐组合:
你可以直接贴:
rsyslog 还是 syslog-ng我可以精确告诉你哪一行配置在丢日志。