Как я могу отключить вывод Log4perl для определенного класса? - PullRequest
4 голосов
/ 22 октября 2009

Я хотел бы использовать 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 ]

3 голосов
/ 22 октября 2009

Я думаю, что вы имеете в виду

    $log->get_logger("Net::Amazon")->level($OFF)
2 голосов
/ 23 октября 2009

Проблема решена, вызванная человеческой глупостью. Забыл сохранить регистратор для текущего пакета после получения его с помощью 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.");
...