我正在编写一些Perl CGI脚本,并使用Log4perl来记录各种文件。我认为能够将特定(或各种)用户的活动跟踪到单独的日志文件可能很有用。我可以在我的会话例程中添加一个钩子,将userid填入MDC,但我不知道从filter访问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文件。没有错误显示我可以看到。
答案 0 :(得分:2)
你不能这样做:
my $value = Log::Log4perl::MDC->get($key); # for 1 value, or
my $hashref = Log::Log4perl::MDC->get_context; # for the whole context