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つ、賢くなったぞ。
いや、こんなの、知っててあたりまえだったりする?
0 件のコメント:
コメントを投稿