在log4perl中禁止第3方库消息

时间:2019-02-03 14:00:53

标签: perl logging

我有一个使用log4perl的perl模块,该模块使用WWW :: Mechanize :: Chrome。当我为我的模块打开调试级别时,我完全被来自机械化软件包依赖项的消息所淹没,尤其是来自Chrome :: DevToolsProtocol的gobs。尽管这些消息对于某些调试可能有用,但我主要只是希望我的调试消息出现在我自己的顶层模块中,而不是我的模块使用的所有隐式依赖项中出现的消息。

我已经尝试过几次寻找抑制它们的方法,但到目前为止却空无一人。我以为我可以为Chrome :: DevToolsProtocol创建自定义日志级别,但是消息的类别显示了我的顶级模块名称,即使它来自于依赖项,因此我也无法抑制,否则我自己的消息会也消失了我觉得这很令人困惑,因为我虽然log4perl具有基于模块名称的类别,所以我不知道为什么chrome软件包被记录在我的模块类别下:

My::Package; => use WWW::Mechanize::Chrome => use Chrome::DevToolsProtocol
Messages from Chrome::DevToolsProtocol are being recorded as category 'My::Package'.

我觉得我对如何控制它缺少一些基本的了解,但是到目前为止,这还使我望而却步。关于我可以尝试的任何建议吗?

use Log::Log4perl qw(:easy);

init_logger($v);    <-- verbosity level set by script options

sub init_logger {
  my $verbose = shift || 0;
  my $level = $INFO;
  $level = $DEBUG if $verbose > 0;
  $level = $TRACE if $verbose > 1;
  Log::Log4perl->init("$FindBin::RealBin/../etc/log4perl.conf");
  $Log::Log4perl::Logger::APPENDER_BY_NAME{Screen}->threshold($level);
  return;
}

log4perl.conf:
log4perl.category = DEBUG, Screen
log4perl.category.WWW.Mechanize.Chrome = INFO, Screen

log4perl.appender.Screen                = Log::Log4perl::Appender::ScreenColoredLevels
log4perl.appender.Screen.layout         = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Screen.layout.ConversionPattern = \
  %d %F{1} %L> %m %n

在屏幕上看到的消息: 2019/02/03 10:53:13 DevToolsProtocol.pm 258>忽略'Network.dataReceived'(-:1000019501.323)

0 个答案:

没有答案