¿Cómo se pueden apagar rápidamente todas las salidas de Log4J usando un log4j.properties
archivo?
Respuestas:
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);
}
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.
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>
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;