Désactivation de la sortie Log4J en Java

87

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

cmcginty
la source

Réponses:

122

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

Edwin
la source
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);
}
Andrew Gilmartin
la source
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
48
 log4j.rootLogger=OFF
flybywire
la source
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.

Rolf
la source
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>
Do Nhu Vy
la source
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;
maytham-ɯɐɥʇʎɐɯ
la source
1
C'est la meilleure solution pour les applications autonomes qui ne devraient rien enregistrer.
basZero