0

私はいくつかの 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 ファイルが作成されることはありません。私が見ることができるエラーは表示されません。

4

1 に答える 1

2

あなたはただできませんか:

my $value   = Log::Log4perl::MDC->get($key);   # for 1 value, or
my $hashref = Log::Log4perl::MDC->get_context; # for the whole context
于 2011-12-04T04:54:29.773 に答える