log4j.properties
ファイルを使用して、すべてのLog4J出力をすばやくオフにするにはどうすればよいですか?
レベルをOFFに設定します(DEBUG、INFOなどの代わりに...)
プログラムでロギングをオフにする場合は、次を使用します
List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
logger.setLevel(Level.OFF);
}
log4j.rootLogger=OFF
レベルをOFFに変更すると、すべてのログが削除されます。 log4j Webサイトによると、重要度の高い順に有効なレベルは、トレース、デバッグ、情報、警告、エラー、致命的です。 ドキュメント化されていない1つのレベル OFFと呼ばれ、FATALよりも高いレベルであり、すべてのロギングをオフにします。
また、ルートロガーを簡単に切り替えることができるように、追加のルートロガーを作成して何もログに記録しない(レベルOFF)こともできます。 ここに投稿があります あなたがそれを始めるために。
Log4J FAQ、 を読むこともできます。すべてのロギングをオフにすると役立つとは思わないからです。 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());