Syslog を Syslog とカスタム ログ ファイルの両方に記録する

Syslog を Syslog とカスタム ログ ファイルの両方に記録する

syslog(Raspbian rsyslog swVersion="8.1901.0")では、

/var/log/syslog特定の文字列を含むシステム メッセージを、(デフォルト) とカスタムの個別のログ ファイルの両方に一致/フィルター処理しようとしています/var/log/nut.log

私は、次のフィルタ行を に配置することで を実現できました/etc/rsyslog.conf

# NUT logging: Include USB msgs since montoring UPS via only USB
:msg,contains,"USB" /var/log/nut.log
& stop
:msg,contains,"nut-" /var/log/nut.log
& stop

& stop一致したらフィルターを停止する必要があります。推奨される方法は、これを専用のファイルに配置することです。例:/etc/rsyslog.d/0-nut.conf

しかし、そうすると、フィルターは へのログ記録を停止し/var/log/syslog/var/log/nut.log... のみにログ記録するようになりますか?

これを行う別の方法はありますか?

THX!

答え1

$IncludeConfigのまたはinclude()ディレクティブはrsyslog.conf、 に​​メッセージを書き込むルールを含むほとんどの標準ルールの前に表示されます。 このファイル内の他のルールの後にルールを追加すると、 のメッセージは、 が一致して に書き込まれる前に、/var/log/syslogすでに に書き込まれていることになります。syslognut.log

代わりに、ルールを別のファイルに配置すると、メッセージは に書き込まれnut.log、 はstopそれ以降のルールをスキップします。 を使用しないことが答えですstop

メッセージに「USB」と「nut-」の両方が含まれ、 に 2 回書き込まれる可能性があるという問題がある場合はnut.log、より洗練された構文を使用する必要があります。

従来の構文は次のように置き換えられました。レイナースクリプトかなり昔の話です。つまり、次のようなフィルターを記述できるということです。

if ($msg contains "USB" or $msg contains "nut-") then {
   action(type="omfile" file="/var/log/nut.log")
}

これにより、メッセージのさらなる処理が妨げられることはありません。

関連情報