如何禁用特定类的Log4perl输出?

时间:2009-10-22 15:40:06

标签: 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");
$log->level($OFF);

$log = $log->get_logger(__PACKAGE__);
$log->info("Hello World.");

不幸的是,调试Net :: Amazon的消息仍然会打印到终端。这是为什么?我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

我认为你的意思是

    $log->get_logger("Net::Amazon")->level($OFF)

答案 1 :(得分:2)

问题解决了,由人类的愚蠢造成的。在使用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.");