Log4perl过滤器可以访问映射的诊断上下文吗?

时间:2011-12-03 23:11:53

标签: perl log4perl

我正在编写一些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文件。没有错误显示我可以看到。

1 个答案:

答案 0 :(得分:2)

你不能这样做:

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