2009-02-21 27 views

Respuesta

103

nivel ajustado en OFF (en lugar de depuración, información, ....)

10

Usted puede cambiar el nivel en OFF que debe deshacerse de todo el registro. De acuerdo con el sitio web log4j, los niveles válidos en orden de importancia son RASTREO, DEPURACIÓN, INFORMACIÓN, ADVERTENCIA, ERROR, FATAL. Hay one undocumented level llamado DESACTIVADO, que es un nivel más alto que FATAL, y desactiva todo el registro.

También puede crear un registrador de raíz extra para registrar nada (nivel desactivado), de modo que pueda cambiar fácilmente los registradores de raíz. Here's a post para que comiences con eso.

Es posible que también desee leer el Log4J FAQ, porque creo que apagar todos los registros puede no ser de ayuda. Ciertamente, no acelerará mucho su aplicación, ya que el código de registro se ejecuta de todos modos, hasta el punto donde log4j decide que no necesita registrar esta entrada.

+0

Y debajo de TRACE es el "nivel" TODO, lo que es una especie de lo contrario. En segundo lugar, podría ser más rápido si el programa hace algo así como "if (logger.isDebugEnabled()) logger.debug (...)" –

+0

El OP no menciona el rendimiento como la razón para querer apagar 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 manejarla. –

68

Si desea desactivar el registro mediante programación a continuación, utilizar

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. –

+0

Gracias, justo lo que quería. –

+0

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

4

cambio de nivel a lo que desea. (Estoy usando Log4j2, versión 2.6.2). Esta es la forma más simple, el cambio a <Root level="off">

Por ejemplo: File log4j2.xml
entorno de desarrollo

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

Además, también es posible convertir cerrar la sesión mediante programación:

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

O

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

Esta es la mejor solución para aplicaciones independientes eso no debería registrar nada. – basZero