Jak można szybko wyłączyć wszystkie dane wyjściowe Log4J za pomocą log4j.properties
pliku?
Odpowiedzi:
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);
}
log4j.rootLogger=OFF
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.
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>
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;