温馨提示×

linux syslog为何不输出

小樊
48
2026-10-10 15:14:19
栏目: 智能运维

Linux 下 syslog 不输出是一个常见但原因很多的问题。下面按最常见原因 → 排查方法 → 解决思路给你系统梳理一下。


一、先确认你说的是哪种“syslog”

Linux 里“syslog”可能指:

  1. syslog(3) 系统调用 / logger 命令
  2. rsyslog / syslog-ng 服务
  3. systemd-journald(新系统)
  4. 应用内部用 syslog 接口但没看到日志

不同情况原因不同。


二、最常见原因 & 排查

1️⃣ syslog 服务没运行(rsyslog / syslog-ng)

ps aux | grep -E 'rsyslog|syslog-ng'

或(systemd):

systemctl status rsyslog

✅ 解决:

systemctl start rsyslog
systemctl enable rsyslog

2️⃣ 日志被写到 journald 而不是 syslog 文件

在 systemd 系统(CentOS 7+/Ubuntu 16+):

  • syslog 可能根本不写 /var/log/messages
  • 日志只在 journalctl

查看:

journalctl -f

✅ 如果你只看了 /var/log/messages,那是“正常现象”


3️⃣ rsyslog 配置把日志丢弃了

检查:

/etc/rsyslog.conf
/etc/rsyslog.d/*.conf

常见坑:

*.*     stop

或:

*.info;mail.none;authpriv.none;cron.none   /var/log/messages

✅ 临时测试:

*.*     /var/log/test.log

然后:

systemctl restart rsyslog
logger "test message"
cat /var/log/test.log

4️⃣ 程序用 syslog 但 facility / priority 不对

例如:

syslog(LOG_ERR, "error");

但配置里:

*.info  /var/log/messages

➡ LOG_ERR 会显示
➡ 如果是 LOG_DEBUG 而没开 debug,就不会输出

查看:

logger -p local0.info "hello"

5️⃣ 权限问题

  • /var/log 不可写
  • 容器环境中没有 syslog socket

检查:

ls -l /dev/log

容器里常见:

# 没有 /dev/log

✅ 解决(容器):

-v /dev/log:/dev/log

6️⃣ SELinux / AppArmor 拦截

getenforce
ausearch -m AVC -ts recent

✅ 临时验证:

setenforce 0

7️⃣ 日志轮转或文件被删

ls -l /var/log/messages
lsof | grep messages

✅ 重启 rsyslog 可恢复:

systemctl restart rsyslog

三、快速自检清单 ✅

systemctl status rsyslog
journalctl -f
logger "test"
cat /var/log/messages
ls -l /dev/log

四、如果你愿意,我可以更精确帮你

你可以告诉我:

  1. 发行版(CentOS / Ubuntu / Alpine?)
  2. 物理机 / 虚拟机 / 容器 / K8s?
  3. 是 命令没输出 还是 程序日志没输出?
  4. 你期望日志出现在哪里?

我可以直接帮你定位到具体配置行。

0 踩