在 Linux 中,syslog 的“过滤”通常可以从 三个层面 来做:
下面按最常见场景说明。
# /etc/rsyslog.conf 或 /etc/rsyslog.d/*.conf
# 只记录 mail 的 error 以上
mail.err /var/log/mail.err
# 忽略 cron 的 info
cron.info ~
常见 facility:
auth, authpriv, cron, daemon, kern, mail, user, local0~local7
priority(从低到高):
debug < info < notice < warning < err < crit < alert < emerg
:programname, isequal, "sshd" /var/log/sshd.log
或排除:
:programname, contains, "systemd" stop
:msg, contains, "error" /var/log/error.log
排除某些日志:
:msg, contains, "timeout" stop
:hostname, isequal, "web01" /var/log/web01.log
修改后重启:
systemctl restart rsyslog
journalctl -u nginx
journalctl -p err
journalctl --since "2024-01-01" --until "2024-01-02"
journalctl | grep "error"
journalctl -u sshd -p warning --since "1 hour ago"
grep "error" /var/log/messages
tail -f /var/log/syslog | grep sshd
grep -E "error|fail|warn" /var/log/syslog
filter f_ssh { program("sshd"); };
destination d_ssh { file("/var/log/ssh.log"); };
log { source(s_src); filter(f_ssh); destination(d_ssh); };
✅ 只保留错误日志
*.err /var/log/errors.log
✅ 丢弃调试日志
*.debug stop
✅ 把 SSH 单独放
:programname, isequal, "sshd" /var/log/ssh.log
& stop
如果你能告诉我:
我可以直接帮你写一份配置。