Postfix邮件日志仍写入syslog问题求助(Ubuntu 22.04+Postfix 3.6.4)
嗨,我来帮你排查这个日志问题~
首先得明确rsyslog的核心运行逻辑:它是按配置文件的文件名数字顺序加载规则,而且默认情况下,日志匹配到一条规则后会继续执行后续所有规则,除非你明确添加终止指令。
你现在遇到的问题,大概率是因为Ubuntu 22.04默认存在一个优先级更高的邮件日志配置文件,比如/etc/rsyslog.d/20-mail.conf(文件名开头数字越小,加载顺序越靠前),里面的规则已经先一步处理了所有mail设施的日志,导致50-default.conf里的排除规则没起到作用。
给你几个具体的排查和解决步骤:
检查是否存在其他mail相关配置文件
先执行命令查看rsyslog的配置文件目录:ls /etc/rsyslog.d/如果看到
20-mail.conf或其他带mail字样的文件,打开它查看规则——默认情况下里面可能会有mail.* -/var/log/mail.log这类配置,这条规则会把所有mail级别的日志写入mail.log,但因为没加终止指令,日志会继续往下匹配*.*规则,最终还是会进入syslog。修改配置终止后续规则匹配
找到对应的mail配置文件后,调整规则,在处理mail日志的规则后面加上& stop,让mail日志匹配完目标规则后,不再执行后续规则。比如可以改成:# 将警告及以上级别日志写入mail.err mail.warn /var/log/mail.err # 可选:将所有mail日志写入mail.log(根据你的需求决定是否保留) mail.* -/var/log/mail.log # 终止后续规则处理,避免mail日志进入syslog & stop重启rsyslog服务让配置生效
修改完配置后,一定要重启服务:sudo systemctl restart rsyslog测试验证效果
发送一封测试邮件(比如用sendmail命令),然后分别查看/var/log/syslog和/var/log/mail.err,确认mail日志不再出现在syslog中,只有警告及以上级别日志保存在mail.err里。
另外再补充一句:你在50-default.conf里写的*.*;mail,auth,authpriv.none -/var/log/syslog规则本身是正确的,但前提是没有更早的规则已经处理过mail日志——rsyslog是“先匹配先执行”,如果前面的规则已经转发了mail日志,后面的排除规则没法回溯修改之前的操作哦。
备注:内容来源于stack exchange,提问作者Brett A.

