Come si può disattivare rapidamente tutto l' output di Log4J utilizzando un log4j.properties
file?
Risposte:
Se si desidera disattivare la registrazione a livello di codice, utilizzare
List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
logger.setLevel(Level.OFF);
}
È possibile modificare il livello su OFF in modo da eliminare tutte le registrazioni. Secondo il sito web log4j, i livelli validi in ordine di importanza sono TRACE, DEBUG, INFO, WARN, ERROR, FATAL. C'è un livello non documentato chiamato OFF che è un livello più alto di FATAL e disattiva tutte le registrazioni.
Puoi anche creare un logger di root aggiuntivo per non registrare nulla (livello OFF), in modo da poter cambiare facilmente i logger di root. Ecco un post per iniziare a farlo.
Potresti anche leggere le FAQ di Log4J, perché penso che disattivare tutti i log potrebbe non essere d'aiuto. Certamente non velocizzerà più di tanto la tua app, perché il codice di registrazione viene eseguito comunque, fino al punto in cui log4j decide che non è necessario registrare questa voce.
Cambia livello a quello che vuoi. (Sto usando Log4j2, versione 2.6.2). Questo è il modo più semplice, passare a<Root level="off">
Ad esempio: ambiente di sviluppo filelog4j2.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 di produzione
<?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>
Inoltre, è anche possibile disattivare la registrazione a livello di codice:
Logger.getRootLogger().setLevel(Level.OFF);
O
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
Questi usano le importazioni:
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;