2009-02-21 9 views

Odpowiedz

103

poziom ustawiony na OFF (zamiast Debug INFO, ....)

10

Można zmienić poziom na OFF, który powinien pozbyć się wszystkich logowania. Według strony log4j ważne poziomy w kolejności ważności to TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Istnieje one undocumented level o nazwie OFF, która jest wyższym poziomem niż FATAL i wyłącza rejestrowanie.

Można również utworzyć dodatkowy program rejestrujący, który nie rejestruje niczego (poziom WYŁ.), Dzięki czemu można łatwo przełączać rejestratory root. Here's a post, aby zacząć od tego.

Być może zechcesz również przeczytać Log4J FAQ,, ponieważ wyłączenie wszystkich rejestrowań może nie pomóc. Z pewnością nie przyspieszy to twojej aplikacji, ponieważ kod logowania jest wykonywany tak, aż do momentu, w którym log4j zdecyduje, że nie musi rejestrować tego wpisu.

+0

a pod TRACE jest "poziom" WSZYSTKO, co jest swego rodzaju przeciwieństwo. Po drugie, może być szybszy, jeśli program robi coś w stylu "if (logger.isDebugEnabled()) logger.debug (...)" –

+0

PO nie wspomina o wydajności jako powodzie, dla którego chce wyłączyć wszystkie rejestrowanie. Kiedy muszę to zrobić, dzieje się tak dlatego, że wiele bibliotek cierpi na swoistą dyzenterię wyrębu, która nie produkuje żadnych użytecznych informacji i chcę na krótką chwilę sobie z nią poradzić. –

68

Jeśli chcesz wyłączyć zalogowaniu programowo następnie użyć

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

Podał "przy użyciu pliku log4j.properties" i jest bardzo użyteczny. –

+0

Dziękuję, właśnie tego chciałem. –

+0

A jak przywrócić rejestratory do poprzedniego ustawienia (programowo)? –

4

zmienić poziom, co chcesz. (Używam Log4j2, wersja 2.6.2). Jest to najprostszy sposób, zmiana <Root level="off">

Na przykład: Plik log4j2.xml
środowiska Development

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

środowisku produkcyjnym

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

Ponadto, możliwe jest również, aby włączyć wylogowanie programowalne:

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

Albo

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

To jest najlepsze rozwiązanie dla autonomicznych aplikacji to nie powinno niczego rejestrować. – basZero