我有一个使用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)