Wyłączanie wyjścia Log4J w Javie

87

Jak można szybko wyłączyć wszystkie dane wyjściowe Log4J za pomocą log4j.propertiespliku?

cmcginty
źródło

Odpowiedzi:

122

Ustaw poziom na OFF (zamiast DEBUG, INFO, ....)

Edwin
źródło
79

Jeśli chcesz programowo wyłączyć rejestrowanie, użyj

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}
Andrew Gilmartin
źródło
5
Określił „użycie pliku log4j.properties” i tak jest to bardzo przydatne.
Jaime Hablutzel
1
Dziękuję, właśnie tego chciałem.
Jose Martinez
Jak przywrócić poprzednie ustawienia rejestratorów (programowo)?
Sachin Sharma
Żadnej magii, tylko proste programowanie. Przechowuj bieżący poziom w Map <Logger, Level> w kontekście długoterminowym, a następnie przywróć go, wykonując iterację po zestawie wpisów wywołując e.getKey (). SetLevel (e.getValue ())
Andrew Gilmartin,
48
 log4j.rootLogger=OFF
Lecieć jak po sznurku
źródło
14

Możesz zmienić poziom na OFF, co powinno pozbyć się całego logowania. Według strony log4j, prawidłowe poziomy w kolejności ważności to TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Istnieje jeden nieudokumentowany poziom o nazwie OFF, który jest wyższy niż FATAL i wyłącza wszelkie logowanie.

Można również utworzyć dodatkowy rejestrator root, który niczego nie loguje (poziom WYŁ.), Dzięki czemu można łatwo przełączać programy rejestrujące root. Oto post, w którym możesz zacząć.

Możesz także przeczytać FAQ Log4J, ponieważ myślę, że wyłączenie całego logowania może nie pomóc. Z pewnością nie przyspieszy to zbytnio Twojej aplikacji, ponieważ kod rejestrujący i tak jest wykonywany do momentu, w którym log4j zdecyduje, że nie musi rejestrować tego wpisu.

Rolf
źródło
A pod ŚLADEM jest „poziom” WSZYSTKO, co jest w pewnym sensie przeciwieństwem. Po drugie, mogłoby być szybciej, gdyby program wykonał coś w rodzaju „if (logger.isDebugEnabled ()) logger.debug (...)”
Tim Büthe
OP nie wspomina wydajności jako powodu chęci wyłączenia całego logowania. Kiedy musiałem to zrobić, dzieje się tak dlatego, że wiele bibliotek cierpi na rodzaj czerwonki, która nie dostarcza użytecznych informacji, i chcę krótkiej ręki, aby sobie z tym poradzić.
Mark Slater
4

Zmień poziom na taki, jaki chcesz. (Używam Log4j2 w wersji 2.6.2). To najprostszy sposób, zmień na<Root level="off">

Na przykład: środowisko File log4j2.xml
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>

Środowisko produkcyjne

<?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>
Do Nhu Vy
źródło
4

Ponadto możliwe jest również programowe wyłączenie wylogowania:

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

Lub

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

Te importy wykorzystują:

import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;
maytham-ɯɐɥʇʎɐɯ
źródło
1
To najlepsze rozwiązanie dla samodzielnych aplikacji, które nie powinny niczego rejestrować.
basZero