そろそろ rsyslog の便利機能も試してみるかと思っていじってたら、式ベースフィルターで小ハマりしたのでメモ。Ubuntu Server 10.04 LTS の rsyslogd 4.2.0.
式ベースフィルターでメッセージにマッチさせる設定をこのように書いたら、
# NG if $msg contains "foo" then /var/log/foo.log
エラーがあるって言われて有効にならない。
rsyslogd: the last error occured in /etc/rsyslog.d/10-application.conf, line 5 rsyslogd: warning: selector line without actions will be discarded
原因は "foo" とダブルクォートで括っていたこと。シングルクォートにしたら動いた。
# OK if $msg contains 'foo' then /var/log/foo.log
分かりにくいのは、プロパティーベースフィルターはダブルクォートでないとダメで、シングルクォートだとエラーになる。なんでこんな仕様なんだろうなあ。
# NG :msg, contains, 'foo' /var/log/foo.log
rsyslogd-3003: error -3003 compare value property - ignoring selector [try http://www.rsyslog.com/e/3003 ] rsyslogd: the last error occured in /etc/rsyslog.d/10-application.conf, line 7