Search code examples
perllogginglog4perl

How can I disable Log4perl output for a particular class?


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?


Solution

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