2009-10-22 42 views
4

我想在一個項目中使用Log4perl,但是對於某個類(在本例中爲Net :: Amazon)禁用它。我認爲這會很容易,但不知何故我失敗了。如何禁用特定類的Log4perl輸出?

我嘗試使用

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."); 

不幸的是,淨::亞馬遜的調試消息仍然打印到終端。這是爲什麼?我在這裏做錯了什麼?

+0

在你的示例代碼的最後你設置'$ log'回記錄儀__PACKAGE__,所以我們應該期待的「Hello World」這樣的記錄。如果將'$ log-> info()'回調一行,會發生什麼? – mob 2009-10-22 17:49:39

回答

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."); 
3

我想你的意思

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

你是對的,我不小心忘記了在設置關卡之前保存記錄器。我相應地編輯了這篇文章。但問題仍然存在。 – Simon 2009-10-22 17:12:46