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