Désactivation de la sortie Log4J en Java


87

Comment désactiver rapidement toutes les sorties Log4J à l'aide d'un log4j.propertiesfichier?

Réponses:


122

Réglez le niveau sur OFF (au lieu de DEBUG, INFO, ....)


79

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);
}

5
Il a précisé "en utilisant un fichier log4j.properties" de toute façon c'est très utile.
Jaime Hablutzel

1
Merci, exactement ce que je voulais.
Jose Martinez

Et comment rétablir les enregistreurs au paramètre précédent (par programmation)?
Sachin Sharma

Pas de magie, juste une programmation simple. Stockez le niveau actuel dans une carte <Logger, Level> dans un contexte de longue durée, puis revenez en itérant sur l'ensemble d'entrées appelant e.getKey (). SetLevel (e.getValue ())
Andrew Gilmartin


14

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.


Et sous TRACE se trouve le «niveau» TOUT, ce qui est un peu le contraire. Deuxièmement, cela pourrait être plus rapide si le programme faisait quelque chose comme "if (logger.isDebugEnabled ()) logger.debug (...)"
Tim Büthe

L'OP ne mentionne pas les performances comme raison pour laquelle vous souhaitez désactiver toute journalisation. Quand j'ai eu besoin de faire cela, c'est parce que de nombreuses bibliothèques souffrent d'une sorte de dysenterie de journalisation, qui ne produit aucune information utile et je veux un moyen abrégé de la gérer.
Mark Slater

4

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>

4

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;

1
C'est la meilleure solution pour les applications autonomes qui ne devraient rien enregistrer.
basZero
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.