出力をカスタムファイルにリダイレクトするアプリケーションとスクリプトがいくつかあります。
私はそれらのアプリケーションを使用して起動します
command | logger -t TAG
これらのメッセージをタグに基づいてフィルタリングし、別のファイルにリダイレクトしたいと思います。これらのアプリケーションは主に長時間実行されるプロセスであり、適切なログローテーションが必要であるため、bashリダイレクトを使用したくありません。
/etc/rsyslog.d/60-myfilter.confにカスタムフィルターを追加しようとしました。
if $syslogtag == 'giomanager' then /var/log/giomanager.log
何が悪いのですか?タグに基づいてフィルタリングする適切な方法は何ですか?または同様の結果を得るより良いオプションはありますか?
だから私はようやく私の問題の解決策を見つけました。
私の道を導いてくれた@lainに感謝します。
前述の解決策は、タグ名に「:」を含めることです。また、これは非常に重要です。ファイル名はアルファベット順で50-default.conf
の前にする必要があります。
再開するには、以下を30-giomanager.conf
に入れます。
:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop
ファイル/var/log/giomanager.log
は、「syslog」ユーザーが書き込み可能である必要があることに注意してください。
そのような場合(またはsyslogtag)は使用していませんが、:<blah>,<condition> ...
(特に:msg、contains、...)を使用しましたが、
:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop
& stop
(または、rsyslog v6以前(RHEL6など)では& ~
)を使用すると、ログに記録した後に一致したメッセージが破棄されます。そうしないと、他のルールによってさらに解析されます。
更新:テスト済み
Syslogtagには:
が含まれており、""
ではなく''
で囲む必要があります