2009-10-22 7 views
4

Je voudrais utiliser Log4perl dans un projet mais le désactiver pour une certaine classe (qui est, dans ce cas Net :: Amazon). Je pensais que ce serait facile, mais j'ai échoué.Comment puis-je désactiver la sortie Log4perl pour une classe particulière?

J'ai essayé d'utiliser

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

Malheureusement, les messages de débogage de Net :: Amazon sont encore imprimés au terminal. Pourquoi donc? Et qu'est-ce que je fais mal ici?

+0

A la fin de votre code d'exemple que vous définissez 'log' de $ retour à l'enregistreur pour __PACKAGE__, donc nous devrions nous attendre « Bonjour tout le monde » journaliser. Que se passe-t-il si vous déplacez l'appel '$ log-> info()' sur une ligne? – mob

Répondre

2

Problème résolu, causée par la bêtise humaine. J'ai oublié de sauvegarder l'enregistreur pour le paquet en cours après l'avoir obtenu avec get_logger. L'exemple suivant fonctionne comme prévu:

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

Je pense que vous voulez dire

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

Vous avez raison, j'ai accidentellement oublié de sauvegarder l'enregistreur avant de régler le niveau. J'ai édité le poste en conséquence. Pourtant, le problème persiste. – Simon

Questions connexes