2009-02-21 30 views

Antwort

103

Set Ebene auf OFF (statt DEBUG, INFO, ....)

10

Sie können den Pegel auf OFF ändern, die von allen Protokollierung loswerden sollte. Gemäß der log4j-Website sind gültige Ebenen in der Reihenfolge ihrer Wichtigkeit TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Es gibt one undocumented level namens OFF, die eine höhere Stufe als FATAL ist, und deaktiviert alle Protokollierung.

Sie können auch einen zusätzlichen Root-Logger erstellen, um nichts zu protokollieren (Level OFF), so dass Sie Root-Logger einfach wechseln können. Here's a post, um damit anzufangen.

Sie könnten auch die Log4J FAQ, lesen, weil ich denke, alle Protokollierung deaktivieren kann nicht helfen. Es wird sicherlich Ihre App nicht so sehr beschleunigen, da der Logging-Code sowieso ausgeführt wird, bis zu dem Punkt, an dem log4j entscheidet, dass er diesen Eintrag nicht protokollieren muss.

+0

Und unter TRACE ist das "Niveau" ALL, was für das Gegenteil ist. Zweitens könnte es schneller sein, wenn das Programm etwas wie "if (logger.isDebugEnabled()) logger.debug (...)" tut. –

+0

Das OP erwähnt Leistung nicht als der Grund, die gesamte Protokollierung ausschalten zu wollen. Wenn ich das tun muss, dann deshalb, weil viele Bibliotheken unter einer Art von Logging-Dysenterie leiden, die keine nützlichen Informationen liefert und ich möchte, dass ich mit ihnen umgehen kann. –

68

Wenn Sie programmatisch dann

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

Er hat angegeben, "eine log4j.properties-Datei zu verwenden", trotzdem ist es sehr nützlich. –

+0

Danke, genau was ich wollte. –

+0

Und wie stellen Sie die Logger auf die vorherige Einstellung (programmgesteuert) zurück? –

4

ändern Ebene verwenden Protokollierung deaktivieren möchten, was Sie wollen. (Ich verwende Log4j2, Version 2.6.2). Das ist einfachste Weg, Änderung <Root level="off">

Zum Beispiel: Die Datei log4j2.xml
Entwicklungsumgebung

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

Produktionsumgebung

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

Darüber hinaus ist es auch möglich zu machen programmgesteuert abmelden:

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

Oder

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

Dies ist die beste Lösung für eigenständige Apps das sollte nichts protokollieren. – basZero

Verwandte Themen