メールログは、mail.logへ

目次

postfix のログを syslog に書き込まないで mail.log だけに書き込む設定

postfix は、メールがどこから来てどこに送ったのかを細かくログファイルに記録します。しかし同じ記録を mail.log だけではなく syslog にも書き込むのが難点です。これは、無駄というだけではなく、syslog の大事な記録がメールログに埋まってしまい見落としてしまいます。

メールログが二ヶ所に記録される理由

syslog と mail.log に書きたすのは、rsyslog プログラムです。postfix から mail という属性のログが送られてくるので、そのログの属性と優先順位に応じて rsyslog が適切なファイルに書き込んだりします。

Ubuntu を例にすると rsyslog の設定ファイルは次のようになっています(不要な部分を省略しています)。

# cat /etc/rsyslog.d/50-default.conf
*.*;auth,authpriv.none             -/var/log/syslog
mail.*                          -/var/log/mail.log

これは、次のような意味です。

  • 全てのログは、/var/log/syslog に記録する。ただし auth と authpriv 属性のは除く。
  • mail 属性のログは、/var/log/mail.log に記録する。

このように mail 属性を記録するエントリーが二ヶ所にあるので、mail.log だけでなく syslog にもログが記録されます。

rsyslog の設定を修正

メールログを syslog に記録しないようにするには、auth と authpriv 属性と同じく mail 属性のログを除くようにすれば良いということです。

*.*;mail,auth,authpriv.none             -/var/log/syslog
mail.*                          -/var/log/mail.log

本来は、mail 属性のログを除くという意味で mail.none と書くのですが、まとめて mail,auth,authpriv.none と書けます。

rsyslog の再起動

rsyslog の設定ファイルを修正しただけでは、現在起動している rsyslog に設定が反映されません。そこで設定を反映させるために service コマンドまたは restart コマンドで rsyslog を再起動させます。

# service rsyslog restart
rsyslog start/running, process 16059

# restart rsyslog
rsyslog start/running, process 20358

rsyslog プログラムを再起動させるには、/etc/init.d/rsyslog restart でも良いのですが、次のように怒られてしまいます。

# /etc/init.d/rsyslog restart
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service rsyslog restart

Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the stop(8) and then start(8) utilities,
e.g. stop rsyslog ; start rsyslog. The restart(8) utility is also available.
rsyslog stop/waiting
rsyslog start/running, process 17137