【问题标题】:Can a Log4perl filter access the Mapped Diagnostic Context?Log4perl 过滤器可以访问映射的诊断上下文吗?
【发布时间】:2011-12-05 00:23:43
【问题描述】:

我正在编写一些 Perl CGI 脚本,并使用Log4perl 登录到各种文件。我认为能够将特定(或各种)用户的活动跟踪到单独的日志文件可能很有用。我可以在我的会话例程中添加一个钩子,将用户 ID 填充到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 文件。我看不到任何错误。

【问题讨论】:

  • 对不起...link
  • 没关系,我一开始并没有调用appender。现在一切都很好,为混乱道歉!

标签: perl log4perl


【解决方案1】:

你不能这样做:

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

【讨论】:

  • 沉浸在 perl cgi 中一天后,我的问题很模糊。在发布问题之前,我通常会等待一天并重新审视一下,但这次没有遵循我自己的建议。
猜你喜欢
  • 2013-05-24
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 2011-10-04
相关资源
最近更新 更多