在 CentOS 中,“syslog”通常指 rsyslog(CentOS 6/7/8 默认使用 rsyslog)。下面按常见使用场景说明如何“过滤”日志。
配置文件一般在:
/etc/rsyslog.conf
/etc/rsyslog.d/*.conf
示例:
# 只记录 mail 的 error 及以上
mail.err /var/log/mail-error.log
# 忽略 cron 的 info 以下
cron.info ~
常见字段:
auth, cron, mail, kern, local0~local7debug, info, notice, warning, err, crit, alert, emerg# 忽略所有来自 local2 的日志
local2.* stop
或旧写法:
local2.* ~
contains# 包含 "timeout" 的日志单独存
:msg, contains, "timeout" /var/log/timeout.log
:msg, regex, "error|fail" /var/log/err.log
:hostname, contains, "web01" /var/log/web01.log
或:
:fromhost-ip, isequal, "192.168.1.10" /var/log/node10.log
例如 不把 cron 写进 /var/log/messages:
cron.* -/var/log/cron
& stop
& stop 表示后续规则不再处理。
如果是 systemd 日志:
# 按服务
journalctl -u nginx
# 按级别
journalctl -p err
# 按时间
journalctl --since "2024-01-01" --until "2024-01-02"
# 按关键字
journalctl | grep timeout
systemctl restart rsyslog
# 或
service rsyslog restart
# 只记录 ssh 错误
:programname, isequal, "sshd" /var/log/sshd.log
& stop
# 忽略调试信息
*.debug /dev/null
如果你能告诉我:
我可以给你更精确的配置示例。