Как можно быстро отключить весь вывод Log4J с помощью log4j.properties
файла?
Ответы:
Если вы хотите программно отключить ведение журнала, используйте
List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
logger.setLevel(Level.OFF);
}
Вы можете изменить уровень на OFF, что должно избавить от всех журналов. Согласно веб-сайту log4j, допустимые уровни в порядке важности следующие: TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Есть один недокументированный уровень под названием OFF, который выше, чем FATAL, и отключает все журналы.
Вы также можете создать дополнительный корневой регистратор, чтобы ничего не регистрировать (уровень ВЫКЛЮЧЕН), чтобы вы могли легко переключать корневые регистраторы. Вот пост, чтобы вы начали с этого.
Вы также можете прочитать FAQ по Log4J, потому что я думаю, что отключение всех журналов может не помочь. Это, конечно, не сильно ускорит ваше приложение, потому что код ведения журнала выполняется в любом случае до момента, когда log4j решает, что ему не нужно регистрировать эту запись.
Измените уровень на то, что хотите. (Я использую Log4j2 версии 2.6.2). Это самый простой способ изменить на<Root level="off">
Например: Среда разработки файловlog4j2.xml
<?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>
Производственная среда
<?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>
Кроме того, также можно программно отключить выход из системы:
Logger.getRootLogger().setLevel(Level.OFF);
Или
Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());
Они используют импорт:
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;