JavaでのLog4J出力の無効化


87

ファイルを使用してすべてのLog4J出力をすばやくオフにするにはどうすればよいlog4j.propertiesですか?

回答:



79

プログラムでロギングをオフにしたい場合は、

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}

5
彼はとにかく「log4j.propertiesファイルを使用する」と指定しました。これは非常に便利です。
Jaime Hablutzel 2011

1
ありがとう、私が欲しかったものだけ。
ホセマルティネス

そして、どのようにしてロガーを以前の設定に(プログラムで)戻すのですか?
Sachin Sharma 2017

魔法はなく、単純なプログラミングだけです。現在のレベルを長期間有効なコンテキストのMap <Logger、Level>に保存し、e.getKey()。setLevel(e.getValue())を呼び出してエントリセットを反復処理して元に戻します
Andrew


14

レベルをOFFに変更すると、すべてのログが削除されます。log4j Webサイトによると、重要度の高い順に有効なレベルは、TRACE、DEBUG、INFO、WARN、ERROR、FATALです。FATALよりも高いレベルであるOFFと呼ばれる文書化されていないレベル1つあり、すべてのロギングをオフにします。

追加のルートロガーを作成して何もログに記録しない(レベルオフ)こともできるため、ルートロガーを簡単に切り替えることができます。これはあなたがそれを始めるための投稿です。

すべてのロギングをオフにしても役に立たないと思うので、Log4JFAQも読むことをお勧めします。とにかくログコードが実行されるため、log4jがこのエントリをログに記録する必要がないと判断するまで、アプリの速度はそれほど向上しません。


そして、TRACEの下には「レベル」ALLがあり、その逆です。プログラムの開発は、「logger.debug場合(logger.isDebugEnabled())(...)」のような何かをする場合は第二に、それはより速いかもしれない
ティム・ブーテ

OPは、すべてのロギングをオフにしたい理由としてパフォーマンスについて言及していません。私がこれを行う必要があるとき、それは多くの図書館が一種の伐採赤痢に苦しんでいるためです。それは有用な情報を生み出さず、私はそれを簡単に扱う方法が欲しいのです。
Mark Slater

4

レベルを必要なレベルに変更します。(私は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>

4

さらに、プログラムでログをオフにすることもできます。

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;

1
これは、何もログに記録しないスタンドアロンアプリに最適なソリューションです。
basZero 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.