2011-12-03 7 views
0

私はいくつかのPerl CGIスクリプトを書いており、Log4perlを使って様々なファイルにログしています。私は、特定の(または様々な)ユーザーの活動を別々のログファイルにトレースすることが有用であると考えました。セッションルーチンにフックを入れて、ユーザIDをMDCに入れることができますが、filterからMDCにアクセスする方法はわかりません。私が知る限り、MDCはパターン作成にのみ使用されます。Log4perlフィルタはマップされた診断コンテキストにアクセスできますか?

これはLog4perlで実行可能ですか?提案パー

私は私の設定ファイルにフィルタを追加しましたが、それはまだ働いていないの下:

log4perl.appender.User   = Log::Log4perl::Appender::File 
log4perl.appender.User.filename = /data/wwwwii/logs/appUser.log 
log4perl.appender.User.syswrite = 1 
log4perl.appender.User.Filter = User 
log4perl.appender.User.layout = PatternLayout 
log4perl.appender.User.layout.ConversionPattern=%p{1} %d{ISO8601}Z [%03r] %15X{remoteAddr}/%05P %M %L --> %m%n 

log4perl.filter.User = sub { Log::Log4perl::MDC->get('userId') == 12; } 

私はできるだけ早く私はセッションルックアップを行うと、ユーザーIDを詰めるが、私はAPPUSERを得る決してしません。ログファイルが作成されました。私が見ることができるエラーは表示されません。

+2

MDCは何ですか.... –

+0

申し訳ありません... [リンク](http://search.cpan.org/~mschilli/Log-Log4perl- 1.34/lib/Log/Log4perl.pm#Mapped_Diagnostic_Context_(MDC)) – mvsjes2

+0

気にしないで、私は最初にアペンダーを呼んでいませんでした。すべてがうまいです、混乱の謝罪! – mvsjes2

答えて

2

は、あなただけの行うことはできません:?

my $value = Log::Log4perl::MDC->get($key); # for 1 value, or 
my $hashref = Log::Log4perl::MDC->get_context; # for the whole context 
+0

私の質問は、perl cgiに没頭した後、曖昧でした。私は通常、1日待って質問を投稿する前に新鮮な表情を撮りますが、今回は自分のアドバイスに従っていませんでした。 – mvsjes2

関連する問題