私はいくつかの Perl CGI スクリプトを書いており、Log4perlを使用してさまざまなファイルにログを記録しています。特定の (またはさまざまな) ユーザーのアクティビティを別のログ ファイルに追跡できると便利だと思いました。セッション ルーチンにフックを挿入して、ユーザー ID をMDCに詰め込むことはできますが、フィルターから MDC にアクセスする方法がわかりません。私の知る限り、MDC はパターン作成にのみ使用されます。
これは 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.log ファイルが作成されることはありません。私が見ることができるエラーは表示されません。