在 CentOS 上 syslog 不记录日志 是很常见的问题,原因通常集中在 服务未运行、配置错误、权限问题或改用 rsyslog/journald 上。下面按最常见原因逐一排查。
从 CentOS 7 开始,系统使用的是 rsyslog,而不是传统 syslog:
ps aux | grep rsyslog
如果没有运行:
systemctl status rsyslog
systemctl start rsyslog
systemctl enable rsyslog
如果你说的是
/var/log/messages没日志,那其实是 rsyslog 在管。
systemctl status rsyslog
如果看到 inactive (dead):
systemctl start rsyslog
CentOS 7+ 默认:
如果 journal 正常但文件没日志:
journalctl -xe
确认 rsyslog 是否从 journal 读取:
grep Imuxsock /etc/rsyslog.conf
检查关键配置是否存在:
grep -E "*.info|/var/log/messages" /etc/rsyslog.conf
正常应有类似:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
修改后重启:
systemctl restart rsyslog
df -h
df -i
如果 /var 满了,rsyslog 会停止写日志。
ls -l /var/log/messages
正常权限:
-rw------- 1 root root
修复:
chown root:root /var/log/messages
chmod 600 /var/log/messages
systemctl restart rsyslog
临时测试:
setenforce 0
如果恢复记录:
grep rsyslog /var/log/audit/audit.log
例如 C 程序:
openlog("myapp", LOG_PID, LOG_LOCAL0);
syslog(LOG_INFO, "test");
closelog();
并确认:
local0.* /var/log/local0.log
ls -l /var/log/messages*
如果是 0 字节:
logrotate -f /etc/logrotate.conf
systemctl status rsyslog
journalctl -xe
df -h
df -i
ls -l /var/log/messages
systemctl restart rsyslog
如果你能补充:
cat /etc/redhat-release)/var/log/messages 或 /var/log/secure我可以给你更精确的解决方案。