web-dev-qa-db-fra.com

Comment désactiver la journalisation log4j à partir de code Java

J'utilise une bibliothèque héritée qui écrit les journaux en utilisant log4j. Mon fichier log4j.properties par défaut dirige le journal vers la console, mais dans certaines fonctions spécifiques de mon programme principal, je souhaite désactiver la journalisation (de toutes les classes).

J'ai essayé ceci:

Logger.getLogger(BasicImplementation.class.getName()).setLevel(Level.OFF);

où "BasicImplementation" est l'une des principales classes de journalisation, mais cela n'a pas fonctionné - les journaux sont toujours écrits sur la console.

Voici mon log4j.properties:

log4j.rootLogger=warn, stdout
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn

log4j.appender.stdout = org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.Apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n

log4j.appender.logfile = ac.biu.nlp.nlp.log.BackupOlderFileAppender
log4j.appender.logfile.append=false
log4j.appender.logfile.layout = org.Apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern = %-5p %d{HH:mm:ss} [%t]: %m%n
log4j.appender.logfile.File = logfile.log
11
Erel Segal-Halevi

Donc, vous avez 3 enregistreurs définis, y compris la racine:

log4j.rootLogger=warn, stdout
log4j.logger.ac.biu.nlp.nlp.engineml=info, logfile
log4j.logger.org.BIU.utils.logging.ExperimentLogger=warn

Malheureusement, pour les désactiver par programme, vous devez spécifier ALL OF THEMM dans le code:

Logger.getLogger("ac.biu.nlp.nlp.engineml").setLevel(Level.OFF);
Logger.getLogger("org.BIU.utils.logging.ExperimentLogger").setLevel(Level.OFF);
Logger.getRootLogger().setLevel(Level.OFF);

Voici comment le réinitialiser à ce qui est défini dans le fichier de configuration.

19
MaDa

Si vous voulez obtenir un silence parfait (comme pour un outil de ligne de commande silencieux), vous pouvez toujours utiliser le NullAppender .

Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
9
schnatterer

Vous pouvez utiliser 

Logger.getRootLogger().setLevel(Level.OFF); 

désactiver toute journalisation en code Java

6
user1853204

Peut-être comme ça:

Logger.getRootLogger().shutdown();

0
YoelBen

Dans la version 1.8 de Java.util.logging.Logger, le formulaire correct est le suivant:

Logger.getLogger("").setLevel(Level.OFF);

0
Tássio Coêlho