Comment désactiver rapidement toutes les sorties Log4J à l'aide d'un log4j.properties
fichier?
Réponses:
Si vous souhaitez désactiver la journalisation par programme, utilisez
List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
logger.setLevel(Level.OFF);
}
Vous pouvez changer le niveau sur OFF, ce qui devrait éliminer toute journalisation. Selon le site Web log4j, les niveaux valides par ordre d'importance sont TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Il existe un niveau non documenté appelé OFF qui est un niveau plus élevé que FATAL et désactive toute journalisation.
Vous pouvez également créer un enregistreur racine supplémentaire pour ne rien enregistrer (niveau OFF), afin de pouvoir changer facilement les enregistreurs racine. Voici un article pour vous aider à démarrer.
Vous voudrez peut-être également lire la FAQ de Log4J, car je pense que désactiver toute journalisation peut ne pas aider. Cela n'accélérera certainement pas autant votre application, car le code de journalisation est exécuté de toute façon, au point où log4j décide qu'il n'a pas besoin de consigner cette entrée.
Changez de niveau à ce que vous voulez. (J'utilise Log4j2, version 2.6.2). C'est la manière la plus simple, changer pour<Root level="off">
Par exemple: environnement de développement de fichierslog4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<Console name="SimpleConsole" target="SYSTEM_OUT">
<PatternLayout pattern="%msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
<Loggers>
<Root level="info">
<AppenderRef ref="SimpleConsole"/>
</Root>
</Loggers>
</Configuration>
Environnement de production
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<Console name="SimpleConsole" target="SYSTEM_OUT">
<PatternLayout pattern="%msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="off">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
<Loggers>
<Root level="off">
<AppenderRef ref="SimpleConsole"/>
</Root>
</Loggers>
</Configuration>
En outre, il est également possible de désactiver la déconnexion par programme:
Logger.getRootLogger().setLevel(Level.OFF);
Ou
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
Ceux-ci utilisent les importations:
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;