Como alguém pode desligar rapidamente toda a saída do Log4J usando um log4j.properties
arquivo?
Respostas:
Se você deseja desligar o registro de forma programática, use
List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
logger.setLevel(Level.OFF);
}
Você pode alterar o nível para OFF, o que deve eliminar todos os registros. De acordo com o site log4j, os níveis válidos em ordem de importância são TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Há um nível não documentado chamado OFF, que é um nível superior ao FATAL e desativa todo o registro.
Você também pode criar um logger de root extra para não registrar nada (nível OFF), para que possa alternar facilmente os loggers de root. Aqui está uma postagem para você começar.
Você também pode querer ler o FAQ do Log4J, porque acho que desligar todos os logs pode não ajudar. Certamente não acelerará tanto o seu aplicativo, porque o código de registro é executado de qualquer maneira, até o ponto em que o log4j decide que não precisa registrar essa entrada.
Mude o nível para o que você deseja. (Estou usando Log4j2, versão 2.6.2). Esta é a maneira mais simples, mude para<Root level="off">
Por exemplo: ambiente de desenvolvimento de arquivoslog4j2.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>
Ambiente de produção
<?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>
Além disso, também é possível desativar o log de forma programática:
Logger.getRootLogger().setLevel(Level.OFF);
Ou
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
Eles usam importações:
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;