如何配置Postfix 3.8.1仅向syslog(journald)记录日志?
我明白你的困扰——明明Postfix默认应该在maillog_file为空时走syslog,但实际还是写了/var/log/mail.log,而且用journalctl -eu postfix.service只能看到服务启停消息,完全看不到邮件处理的日志。这是因为Ubuntu 23.10的默认配置里,Postfix的日志处理还有额外环节,咱们一步步来解决:
第一步:确认Postfix的基础日志路由设置
你已经通过postconf | egrep maillog_file确认了maillog_file是空值,这本身是符合预期的——Postfix确实会默认把日志发给syslog守护进程(也就是你的journald)。问题出在两个额外的默认配置上:一是Ubuntu默认可能通过rsyslog把syslog里的mail日志转写到文件,二是journald默认没把Postfix的业务日志和postfix.service关联起来,导致你用服务单元过滤看不到详细内容。
第二步:停止日志写入文件(按需操作)
如果你的目标是完全不生成/var/log/mail.log这类文件日志,只保留journald里的记录,需要调整rsyslog的配置:
- 打开rsyslog的默认配置文件:
sudo nano /etc/rsyslog.d/50-default.conf - 找到以下和邮件日志相关的行,把它们注释掉(在行首加
#):# mail.* -/var/log/mail.log # mail.info -/var/log/mail.info # mail.warn -/var/log/mail.warn # mail.err /var/log/mail.err - 保存退出后重启rsyslog服务:
sudo systemctl restart rsyslog
如果你的系统已经完全用journald替代了rsyslog,也可以直接禁用rsyslog:sudo systemctl disable --now rsyslog
第三步:让journald关联Postfix日志到服务单元
默认情况下,Postfix的业务日志不会自动关联到postfix.service,所以用journalctl -eu postfix.service只能看到服务启停事件。要解决这个问题,需要给Postfix指定统一的syslog标识符:
- 编辑Postfix主配置文件:
sudo nano /etc/postfix/main.cf - 添加或修改以下参数:
这个参数会让Postfix发送日志时带上syslog_name = postfixpostfix标识符,journald会自动把这些日志和postfix.service关联起来。 - 重启Postfix服务生效:
sudo systemctl restart postfix
第四步:验证配置效果
现在你可以做几个验证:
- 发送一封测试邮件,检查
/var/log/mail.log是否不再有新日志写入; - 执行
journalctl -u postfix.service,应该能看到邮件处理的详细日志了; - 也可以用
journalctl -t postfix直接按标识符过滤,查看所有Postfix日志。
这样配置后,Postfix就只会把日志发送给journald(你的syslog守护进程),不再生成文件日志,而且能通过服务单元方便地过滤查看日志内容。
备注:内容来源于stack exchange,提问作者user2690527

