ファイルを使用してすべての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 Webサイトによると、重要度の高い順に有効なレベルは、TRACE、DEBUG、INFO、WARN、ERROR、FATALです。FATALよりも高いレベルであるOFFと呼ばれる文書化されていないレベルが1つあり、すべてのロギングをオフにします。
追加のルートロガーを作成して何もログに記録しない(レベルオフ)こともできるため、ルートロガーを簡単に切り替えることができます。これはあなたがそれを始めるための投稿です。
すべてのロギングをオフにしても役に立たないと思うので、Log4JFAQも読むことをお勧めします。とにかくログコードが実行されるため、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;