Wyłączanie wyjścia Log4J w Javie


87

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

Odpowiedzi:



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);
}

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,


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.


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>

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;

1
To najlepsze rozwiązanie dla samodzielnych aplikacji, które nie powinny niczego rejestrować.
basZero
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.