5

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?

Ether
  • 53,118
  • 13
  • 86
  • 159
Simon
  • 1,643
  • 2
  • 17
  • 23
  • At the end of your sample code you set `$log` back to the logger for __PACKAGE__, so we should expect "Hello world" to get logged. What happens if you move the `$log->info()` call back one line? – mob Oct 22 '09 at 17:49

2 Answers2

4

I think you mean

    $log->get_logger("Net::Amazon")->level($OFF)
mob
  • 117,087
  • 18
  • 149
  • 283
  • 1
    You are right, I accidentally forgot to save the logger before setting the level. I edited the post accordingly. Still, the problem persists. – Simon Oct 22 '09 at 17:12
3

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.");
Simon
  • 1,643
  • 2
  • 17
  • 23