views:

85

answers:

2

I would like to use Log4perl in a project but disable it for a certain class (which is, in this case Net::Amazon). I thought this would be an easy one, but somehow I failed.

I tried using

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

Unfortunately, debugging messages of Net::Amazon are still printed to the terminal. Why is that? And what am I doing wrong here?

+1  A: 

I think you mean

    $log->get_logger("Net::Amazon")->level($OFF)
mobrule
You are right, I accidentally forgot to save the logger before setting the level. I edited the post accordingly. Still, the problem persists.
Bluegene
A: 

Problem solved, caused by human stupidity. Forgot to save the logger for the current package after getting it with get_logger. The following example works as expected:

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