ttt

getttyent

(FreeBSD) cyrus-imapdのログが/var/log/messagesにたくさん出すぎ ~ /etc/syslog.confで調節

2006-11-01 00:19:55 | デジタル・インターネット

auxpropfunc error invalid parameter supplied
というエラーメッセージがたくさん出る問題は、先日解決したものの、

(cyrus-imapd) auxpropfunc error invalid parameter supplied というエラーメッセージ

まだまだ、cyrus-imapdが出すログメッセージが多すぎて、ちょっと気になります。
どうも、クライアントがimapd/pop3dに接続するだけで

Oct 25 10:39:43 SERV pop3[9079]: login: CLNT1 [XX.XX.XX.26] user1 plaintext User logged in
Oct 25 10:39:47 SERV pop3[8978]: login: CLNT2 [XX.XX.XX.37] user2 plaintext User logged in
Oct 25 10:39:48 SERV pop3[9079]: login: CLNT1 [XX.XX.XX.26] user1 plaintext User logged in

といったログメッセージが必ず/var/log/messagesに出てきます。

接続の記録をログに残すのはいいのですが、/var/log/messagesには、imap/pop以外にも、いろんなログが出力されるので、混在していて見づらくなるし、大切なログを見落としてしまう可能性もあります。

cyrus-imapdだけ、別のログファイルに残せればいいのにな~~~と思い、ちょっとsyslogの勉強をしてみました。

syslogは、/etc/syslog.confにログ出力のルールを書いておくと、それにしたがって、ログを出したり出さなかったり、出すならどこに出すか、など挙動をコントロールできる仕組みです。基本的に、ルールとしては、facilityとlevelという2つの条件を指定することで、ログの出力先を振り分けます。

・・・ま、それくらいのことは知ってたのですが、あんまり詳しい使い方は、実は、ぜんぜんわかってませんでした。

☆ ☆ ☆ 

cyrus-imapdのドキュメントを読むと、cyrus-imapdは、syslog経由でログを出すときに、LOCAL6というfacilityで出力する、ということでした。だから、/etc/syslog.confに

local6.*          /var/log/cyrus-imapd.log

と書けばよい・・・と思ったのですが、それでもまだ/var/log/messagesに、たくさんログがでてきます。

なんでかな?と思って、cyrus-imapdのソースコードを眺めてみました(←基本ですね)。
とりあえず、「grep -R syslog .」とかやってみると、こんな行を発見。

./imap/pop3d.c: syslog(LOG_NOTICE, "login: %s %s%s plaintext%s %s", popd_clienthost,

これって、levelがnoticeで出力する、ってことです。そして、FreeBSDのデフォルトの/etc/syslog.confを見ると

*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err  /var/log/messages

とあるので、「*.notice」のところでひっかかって、/var/log/messagesにログ出力されてたのですね。facilityの部分が「*」なので、LOCAL6も含まれます。だから、cyrus-imapdのログも、/var/log/messagesに出てくる、と。

というわけで、*.noticeをやめて、「local6以外のnotice」ってのを指定できればいいんだろうな、と思ったのですが、どう書くの???

どうやら、これでよさそうです。

*.notice;local6.none;authpriv.none;kern.debug;lpr.info;mail.crit;news.err       /var/log/messages

「*.notice;local6.none;」のところがミソで、levelをnoneにすると、そのfacilityは無効になる、っていう仕組みなんだそうです。

/etc/syslog.confで書いた内容が正しく意図どおりなっているか、loggerというコマンドで動作確認できます。facilityがkern、levelをnoticeにして、ログを出してみるには、こんなかんじ。

# logger -p "kern.notice" -t "kernel" Hello World

すると、ちゃんと/var/log/messagesに記録されています。

Oct 25 10:46:19 SERV kernel: Hello World

☆ ☆ ☆ 

「man syslog.conf」をじっくり読んでいくと、level指定のときに、不等号で大小比較もできることがわかりました。

local6.>=debug           /var/log/cyrus-imapd.log

と書けば、levelがdebug以上のとき、という意味になります。

なんだか、1つ、賢くなったぞ。

いや、こんなの、知っててあたりまえだったりする?


コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。