2009-02-21 12 views

risposta

103

livello impostato su OFF (invece di DEBUG, INFO, ....)

10

È possibile modificare il livello su OFF, che dovrebbe sbarazzarsi di tutta la registrazione. Secondo il sito web log4j, i livelli validi in ordine di importanza sono TRACE, DEBUG, INFO, WARN, ERROR, FATAL. C'è one undocumented level chiamato OFF che è un livello superiore a FATAL e disattiva la registrazione.

È anche possibile creare un logger di root aggiuntivo per registrare nulla (livello OFF), in modo da poter passare facilmente i logger di root. Here's a post per iniziare.

Si potrebbe anche voler leggere il Log4J FAQ, perché penso che la disattivazione di tutto il logging potrebbe non essere d'aiuto. Non accelera sicuramente la tua app, perché il codice di registrazione viene comunque eseguito, fino al punto in cui log4j decide che non è necessario registrare questa voce.

+0

E sotto traccia è il "livello" tutto, che una specie di l'opposto. In secondo luogo, potrebbe essere più veloce se il programma fa qualcosa come "if (logger.isDebugEnabled()) logger.debug (...)" –

+0

L'OP non menziona le prestazioni come la ragione per voler disattivare tutta la registrazione. Quando ho bisogno di fare questo, è perché molte biblioteche soffrono di una sorta di dissenteria di registrazione, che non produce informazioni utili e voglio un modo a breve termine per affrontarlo. –

68

Se si desidera disattivare la registrazione a livello di codice quindi utilizzare

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

Ha specificato "utilizzando un file log4j.properties" comunque è molto utile. –

+0

Grazie, proprio quello che volevo. –

+0

E come si ripristinano i logger sull'impostazione precedente (programmaticamente)? –

4

Change livello per ciò che si desidera. (Sto usando Log4j2, versione 2.6.2). Questo è il modo più semplice, passare alla <Root level="off">

Ad esempio: Il file log4j2.xml
Ambiente di sviluppo

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

Inoltre, è anche possibile trasformare disconnettersi programmaticamente:

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

O

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

Questa è la soluzione migliore per le app autonome che non dovrebbe registrare nulla. – basZero