Les niveaux de journalisation de Log :: Log4perl de Perl peuvent-ils être modifiés dynamicment sans mettre à jour la configuration?

J’ai un modèle Mason en cours d’exécution sous mod_perl, qui utilise Log :: Log4perl.

Je souhaite modifier le niveau de consignation d’un appender particulier, mais la modification de la configuration est trop délicate, car elle devrait passer par notre processus de déploiement pour être mise en ligne.

Existe-t-il un moyen de modifier le niveau de journalisation d’un composant au moment de l’exécution, après le démarrage d’Apache, sans modifier le fichier de configuration, puis de modifier les nouveaux threads Apache?

Si vous avez importé les constantes de niveau de journalisation de Log::Log4perl::Level , vous pouvez faire des choses comme:

 $logger->level($ERROR); # one of DEBUG, INFO, WARN, ERROR, FATAL $logger->more_logging($delta); # Increase log level by $delta levels, # a positive integer $logger->less_logging($delta); # Decrease log level by $delta levels. 

Cela se trouve dans la section Modification du niveau de journalisation sur un enregistreur dans les documents Log::Log4perl .

Cela me semble un peu piraté, mais ça marche:

$Log::Log4perl::Logger::APPENDER_BY_NAME{SCREEN}->threshold($DEBUG);

Et pour le rendre plus dynamic, vous pouvez transmettre une variable pour le nom et le niveau de l’appendeur.

 %LOG4PERL_LEVELS = ( OFF =>$OFF, FATAL =>$FATAL, ERROR =>$ERROR, WARN =>$WARN, INFO =>$INFO, DEBUG =>$DEBUG, TRACE =>$TRACE, ALL =>$ALL ); $Log::Log4perl::Logger::APPENDER_BY_NAME{$appender_name}->threshold($LOG4PERL_LEVELS{$new_level});