私はいくつかの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を得る決してしません。ログファイルが作成されました。私が見ることができるエラーは表示されません。
MDCは何ですか.... –
申し訳ありません... [リンク](http://search.cpan.org/~mschilli/Log-Log4perl- 1.34/lib/Log/Log4perl.pm#Mapped_Diagnostic_Context_(MDC)) – mvsjes2
気にしないで、私は最初にアペンダーを呼んでいませんでした。すべてがうまいです、混乱の謝罪! – mvsjes2