web-dev-qa-db-ja.com

プログラム名とログレベルでログメッセージを同時にrsyslogdでフィルタリングする

プログラムfoobarからのログメッセージをログレベルerrでrsyslogdのファイル/var/log/foobar.logに保存したい。どうやってやるの?

これは、プログラム名でメッセージをフィルタリングする方法です。

:programname,contains,"foobar" /var/log/foobar.log

これは、ログレベルでメッセージをフィルタリングする方法です。

*.err /var/log/foobar.log

しかし、これらの両方のフィルターで同時にフィルター処理する方法がわかりません。

5
Marko Kevac

rsyslogd wikiのこの例 は、あなたが望むようなことをする方法を提案しています。 式ベースの構文を使用したプログラム名によるフィルタリングの部分です。

Wikiで提供されている例を使用する:

if $programname == 'foobar' and $syslogseverity-text == 'error' then /var/log/foobar.log 

それをrsyslogd.confまたはrsyslog.d内のスニペットとして配置します

5
coredump

その簡単な方法は... if($ program contains "foobar")and($ severity contains "err")then /var/log/foobar.log

もちろん、他にもたくさんの方法がありますが、上記は非常に簡単だと思います。

2