Debian 的 syslog(通常指 rsyslog 或 syslog-ng)出现“日志丢失”是一个常见问题,通常不是单一原因造成的。下面按最常见到最容易被忽略的顺序,帮你系统排查。
systemctl status rsyslog
如果未运行:
systemctl start rsyslog
systemctl enable rsyslog
Debian 默认使用 systemd-journald,很多日志不再写入 /var/log/syslog,而是存在 journal 中。
查看:
journalctl -xe
确认是否启用了 rsyslog 转发:
cat /etc/rsyslog.conf | grep imjournal
典型情况:
/var/log/syslog 为空journalctl 里却有日志✅ 这是最常见原因之一
检查:
ls -lh /var/log/syslog*
ls -lh /var/log/messages*
查看轮转配置:
cat /etc/logrotate.d/rsyslog
常见问题:
.gzdf -h
df -i
如果磁盘满或 inode 满,syslog 会直接停止写入。
Debian 默认用 AppArmor:
aa-status
某些程序(如自定义 daemon)可能被限制写日志。
检查:
grep -R "stop\|discard\|~" /etc/rsyslog.conf /etc/rsyslog.d/
例如:
*.* stop
会导致后续规则不再处理。
例如:
*.err
会导致 info / debug 不记录。
✅ 临时测试:
*.* /var/log/syslog
某些程序:
典型例子:
StandardOutput=journal
StandardError=journal
不会进入 /var/log/syslog
确认:
ls /usr/lib/rsyslog/imjournal.so
配置中应包含:
module(load="imjournal")
# 1. 服务状态
systemctl status rsyslog
# 2. journal 是否有日志
journalctl -xe
# 3. 磁盘
df -h
# 4. 日志文件
ls -lh /var/log/syslog*
# 5. 重新启动 rsyslog
systemctl restart rsyslog
对比:
journalctl -u 服务名
cat /var/log/syslog | grep 服务名
如果 journal 有,syslog 没有 → 这是正常现象,不是 bug。
✅ 以下情况属于正常:
/var/log/syslog 只记录部分日志✅ 如果你想“全部进 syslog”:
imjournal如果你愿意,可以告诉我:
cat /etc/debian_version)/var/log/syslog 是否存在、是否为空我可以帮你精确定位是哪一种情况。