如何禁用特定类的Log4perl输出?
我希望在项目中使用Log4perl,但对某个类禁用它(在本例中是Net::Amazon)。我原以为这很容易,但不知何故我失败了 我试着用如何禁用特定类的Log4perl输出?,perl,logging,log4perl,Perl,Logging,Log4perl,我希望在项目中使用Log4perl,但对某个类禁用它(在本例中是Net::Amazon)。我原以为这很容易,但不知何故我失败了 我试着用 use Log::Log4perl (:easy_init); use Net::Amazon; my $amz = Net::Amazon->new( ... ); my $log = Log::Log4perl->easy_init($DEBUG); $log = $log->get_logger("Net::Amazon"); $lo
use Log::Log4perl (:easy_init);
use Net::Amazon;
my $amz = Net::Amazon->new( ... );
my $log = Log::Log4perl->easy_init($DEBUG);
$log = $log->get_logger("Net::Amazon");
$log->level($OFF);
$log = $log->get_logger(__PACKAGE__);
$log->info("Hello World.");
不幸的是,Net::Amazon的调试消息仍然打印到终端上。为什么呢?我做错了什么?我想你是说
$log->get_logger("Net::Amazon")->level($OFF)
问题解决了,是人类的愚蠢造成的。在使用get_logger获取当前包后,忘记保存该包的记录器。以下示例按预期工作:
use Log::Log4perl (:easy);
use Net::Amazon;
my $amz = Net::Amazon->new( ... );
Log::Log4perl->easy_init($DEBUG);
$log = get_logger("Net::Amazon");
$log->level($OFF);
$log = $log->get_logger(__PACKAGE__);
$log->info("Hello World.");
你是对的,我不小心忘了在设置级别之前保存记录器。我据此编辑了这篇文章。但是,问题仍然存在。在示例代码的末尾,您将
$log
设置回logger for PACKAGE,因此我们应该希望记录“Hello world”。如果移动$log->info()
回调一行会发生什么?