Deshabilitar la salida de Log4J en Java


87

¿Cómo se pueden apagar rápidamente todas las salidas de Log4J usando un log4j.propertiesarchivo?

Respuestas:


122

Establezca el nivel en OFF (en lugar de DEBUG, INFO, ....)


79

Si desea desactivar el registro mediante programación, utilice

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}

5
Especificó "usar un archivo log4j.properties" de todos modos, es muy útil.
Jaime Hablutzel

1
Gracias, justo lo que quería.
Jose Martinez

¿Y cómo revierte los registradores a la configuración anterior (mediante programación)?
Sachin Sharma

Sin magia, solo programación simple. Almacene el nivel actual en un mapa <Logger, Level> en un contexto de larga duración y luego revierte iterando sobre el conjunto de entradas llamando a e.getKey (). SetLevel (e.getValue ())
Andrew Gilmartin


14

Puede cambiar el nivel a APAGADO, lo que debería eliminar todos los registros. Según el sitio web log4j, los niveles válidos en orden de importancia son TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Hay un nivel indocumentado llamado APAGADO que es un nivel más alto que FATAL y apaga todos los registros.

También puede crear un registrador raíz adicional para no registrar nada (nivel APAGADO), de modo que pueda cambiar fácilmente los registradores raíz. Aquí hay una publicación para que comiences con eso.

Es posible que también desee leer las preguntas frecuentes de Log4J, porque creo que desactivar todos los registros puede no ser de ayuda. Ciertamente no acelerará tanto su aplicación, porque el código de registro se ejecuta de todos modos, hasta el punto en que log4j decide que no necesita registrar esta entrada.


Y debajo de TRACE está el "nivel" TODOS, lo que es todo lo contrario. En segundo lugar, podría ser más rápido si el programa hace algo como "if (logger.isDebugEnabled ()) logger.debug (...)"
Tim Büthe

El OP no menciona el rendimiento como la razón para querer desactivar todos los registros. Cuando he necesitado hacer esto, es porque muchas bibliotecas sufren de una especie de disentería de registro, que no produce información útil y quiero una forma abreviada de manejarlo.
Mark Slater

4

Cambia de nivel a lo que quieras. (Estoy usando Log4j2, versión 2.6.2). Esta es la forma más sencilla, cambie a<Root level="off">

Por ejemplo: entorno de desarrollo de archivoslog4j2.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>

Entorno de producción

<?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

Además, también es posible desactivar el cierre de sesión mediante programación:

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

O

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

Estos utilizan importaciones:

import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;

1
Esta es la mejor solución para aplicaciones independientes que no deberían registrar nada.
basZero
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.