rsyslogでログ受信したときに/var/log/messagesに出力しない方法

rsyslogでリモートサーバからログ受信したときに別ファイルに出力するのはいいとして
/var/log/messages にも同時に書かれちゃって「くぎゅぅ」ってなりますよね!
そんなとき、isuconの神から椅子リプライが飛んできました。

さすがや...!


そこでrsyslog.confは以下のような設定なりました。*1

# applog setting
$ModLoad imtcp
$ModLoad imudp
$InputTCPServerRun 514
$UDPServerRun 514
$template applog, "%msg%\n"
$template applogfile, "/var/log/applog/accesslog.%$year%%$month%%$day%"
local0.* ?applogfile

# タグに「AppName」が含まれてたら以後除外 
:syslogtag, contains, "AppName" ~
# または IPで除外
#:fromhost-ip, isequal, "127.0.0.1" ~

(snip...)


注意点としては、除外設定はmessageのログ出力設定より前に書く必要があります。
さらに下記のような点も考慮しておいたほうが良いでしょう。

fujiwara++

*1:rsyslogの構文エラーに苦しめられたのは秘密