2017-01-25 2 views
2

J'ai le fichier de configuration log4perl.conf suivant que j'utilise pour plusieurs scripts. Il est configuré pour afficher les messages de tous les niveaux de journal.Définition de plusieurs niveaux de consignation dans Log4Perl

# Log4perl configuration file 

log4perl.rootLogger = ALL, screen, file 

log4perl.appender.screen = Log::Log4perl::Appender::Screen 
log4perl.appender.screen.stderr = 0 
log4perl.appender.screen.layout = PatternLayout 
log4perl.appender.screen.layout.ConversionPattern = %d %p> %m%n 

log4perl.appender.file = Log::Log4perl::Appender::File 
log4perl.appender.file.filename = sub { my $script=$0; $script =~ s/(dev|test|prod)\/script/log/; $script =~ s/\.[^.]+$//; return "$script.log" } 
log4perl.appender.file.mode = append 
log4perl.appender.file.layout = PatternLayout 
log4perl.appender.file.layout.ConversionPattern = %d %p> %m%n 

Les scripts utilisent cet extrait de code pour l'initialiser:

use Log::Log4perl; 
# Logger configuration 
Log::Log4perl->init('/etc/log4perl.conf'); 
$logger = Log::Log4perl->get_logger(); 

Quelle est la meilleure façon de régler le niveau d'enregistrement sans avoir à modifier le fichier de configuration à chaque fois car il y a plusieurs scripts en utilisant le même config. Puis-je créer un nouvel enregistreur et demander au script d'utiliser celui-ci à la place de l'enregistreur racine?

+0

Voulez-vous dire que vous voulez changer temporairement le niveau de journalisation (comme dans une petite section d'un seul script) sans apporter de modifications à la configuration? Ou voulez-vous un enregistreur séparé pour chaque script? – ThisSuitIsBlackNot

+0

J'aimerais pouvoir changer temporairement le niveau de journalisation pour un seul script sans affecter les autres scripts. Pas sûr du meilleur moyen d'accomplir cela. –

Répondre

0

Vous pouvez utiliser la méthode level pour régler le niveau d'enregistrement dans votre programme:

use strict; 
use warnings 'all'; 

use Log::Log4perl; 
use Log::Log4perl::Level; 

Log::Log4perl->init(\*DATA); 

my $logger = Log::Log4perl->get_logger; 

$logger->info('before'); 
$logger->level($INFO); 
$logger->info('after'); 

__DATA__ 
log4perl.rootLogger    = WARN, Screen 
log4perl.appender.Screen  = Log::Log4perl::Appender::Screen 
log4perl.appender.Screen.layout = Log::Log4perl::Layout::PatternLayout 
log4perl.appender.Screen.layout.ConversionPattern = %d %p> %m%n 

Sortie:

2017/01/25 12:59:58 INFO> after 

Cela n'affectera pas d'autres scripts qui utilisent le même fichier de configuration, car ils auront chacun leur propre instance de Log :: Log4perl.

Vous pouvez également utiliser les méthodes more_logging/inc_level ou less_logging/dec_level, qui prennent une valeur delta au lieu d'un niveau de journalisation absolue.