2016-04-29 9 views
2

重要なイベントメッセージを別のログファイルに収集する必要があります。重要なイベントメッセージを別のLog :: Log4perlロガーに送る

イベントはレベルに関係しませんが、すべてのERRORレベルとアップイベントは「重要」とみなされますが、イベントはレベル関連ではありません。そのようなイベントの多くは、INFOまたはWARNレベルです。したがって、レベルのしきい値やマッチングは答えではないようです。

また、イベントは階層の特定のブランチに限定されません。これらはアプリケーション全体から発生する可能性がありますので、「カテゴリ」はどちらにも適合しないようですか、それともそうですか?

編集: 現在、私は一般的なINFOレベル、メンテナンスロガーとWARNレベルのスクリーンロガー

をログイン:: Log4perlと、このようなロガーを達成するための方法はありますか?

よろしく

メイア

+0

あなたはそれが「_significant_」であると判断するにはどうすればよいですか? "_events_"は、イベント駆動型プログラミングや一般的な意味で、単にメッセージ(プリントなど)と同じ意味ですか? – zdim

+0

私は、非常に一般的な意味での「事象」を意味し、ユーザーが例えば新しい顧客の追加について知るために重要である何かの発生のみを意味する。私がどのように決定するかについては、新しいレベルに似た、可能性に依存します。例えば、 "NOTE"と "$ logger-> note(...); ' – MeirG

+0

オープン性は意思決定側(コード内)で、おそらく[カスタムフィルタ](http://search.cpan.org/~mschilli/Log-Log4Log1.4.7/lib/Log/Log4perl .pm#Custom_Filters)が役に立ちますか?そのためには、[Log :: Log4Perl :: Filter](http://search.cpan.org/~mschilli/Log-Log4perl-1.47/lib/Log/Log4perl/Filter.pm)という別のクラスがあります。 – zdim

答えて

2

あなたはfiltersを使用することがあります。

log4perl.logger = WARN, Log1, Log2 
log4perl.filter.Filter1  = sub { ... } 
log4perl.filter.Filter2  = sub { ... } 
log4perl.appender.Log1  = Log::Log4perl::Appender::Screen 
log4perl.appender.Log1.Filter = Filter1 
log4perl.appender.Log2  = Log::Log4perl::Appender::File 
log4perl.appender.Log2.Filter = Filter2 

それとも、Log::Log4perl::Filterから継承された独自のフィルターパッケージを書き込むことができます。

log4perl.logger = WARN, Log1, Log2 
log4perl.filter.Filter1  = MyApp::Log::Filter1 
log4perl.filter.Filter2  = MyApp::Log::Filter2 
log4perl.appender.Log1  = Log::Log4perl::Appender::Screen 
log4perl.appender.Log1.Filter = Filter1 
log4perl.appender.Log2  = Log::Log4perl::Appender::File 
log4perl.appender.Log2.Filter = Filter2 
+0

2つのファイルに1つのロガーが書き込むことを好むので、私は以下のように_以下の "追加カテゴリ" _を均等に実行してこの答えを選びました。少し迷惑なことは、フィルタがチェックしている文字列がすべてのエントリに表示されることです。 – MeirG

3

あなたLog4perlでan additional categoryを追加することによって、これを達成することができます。

カテゴリはまた、両方の、Log4perlで「ロガー」と呼ばれる同じものを指し、これらの用語は、交換可能に

使用されているあなたは、このような追加のロガーをつかむことができますされています

my $important_logger = Log::Log4perl->get_logger("Important"); 

カテゴリは独自の設定を持つことができます:

log4perl.logger.Important    = TRACE, ImportantApp 
log4perl.additivity.Important   = 0 
log4perl.appender.ImportantApp   = Log::Log4perl::Appender::File 
log4perl.appender.ImportantApp.filename = important.log 

ImportantAppは、という名前ので、Appenderインスタンスで使用され、2つの下の行に設定されています。最初の行は、基本的意味:

をアペンダにログレベルTRACE以上ですべてを送るImportantAppを命名。

Importantはロガーの名前、または我々はget_logger("Important")で上記つかんカテゴリー、です。

関連する問題