web-dev-qa-db-ja.com

Log4jでLogger.debug()を有効にする方法

次の行を実行しようとすると、最後の2つのステートメントのみが表示され(「Here is some ERROR」と「Here is some FATAL」)、最初の3つのステートメントは表示されません。なぜこうなった?

    logger.debug("Here is some DEBUG");
    logger.info("Here is some INFO");
    logger.warn("Here is some WARN");
    logger.error("Here is some ERROR");
    logger.fatal("Here is some FATAL");

log4j.propertyには

log4j.rootLogger=debug,stdout
log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.Apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{mm:ss}(%F:%M:%L)%n%m%n%n
46
Hariharbalaji

おそらくプロジェクトのどこかにlog4j.propertiesファイルがあります。そのファイルでは、必要なデバッグ出力のレベルを構成できます。この例を参照してください。

_log4j.rootLogger=info, console

log4j.appender.console=org.Apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.Apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

log4j.logger.com.example=debug
_

最初の行は、ルートロガーのログレベルを「info」に設定します。つまり、info、warn、error、fatalのみがコンソールに出力されます(アペンダーはその少し下で定義されます)。

最後の行は、com.example。*のロガーを設定します(LogFactory.getLogger(getClass())を介してロガーを取得する場合)は、デバッグレベルになります。つまり、デバッグも出力されます。

60
Thomas Lötzer

JUnitテストでデバッグロギングを一時的にオンにするために時々使用する簡単な1行のハックを次に示します。

Logger.getRootLogger().setLevel(Level.DEBUG);
52
Stephen C

log4j.xmlという名前のファイルをクラスパスに入れます。内容は、例えば.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.Apache.org/log4j/">

    <appender name="stdout" class="org.Apache.log4j.ConsoleAppender">
        <layout class="org.Apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n"/>
        </layout>
    </appender>

    <root>
        <level value="debug"/>
        <appender-ref ref="stdout"/>
    </root>

</log4j:configuration>
9
yawn

これはおそらく、log4j設定がERRORに設定されているために発生しています。次のような内容のlog4j.propertiesファイルを探します。

log4j.rootLogger=ERROR, CONSOLE

# console logging
log4j.appender.CONSOLE=org.Apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout=org.Apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %-20.20t %-24c{1}: %m%n

rootLoggerは、ERRORアペンダーを使用して、ここでCONSOLEレベルに設定されます。

コンソールアペンダーなどの一部のアペンダーには、Thresholdレベルを無効にするために使用できるrootLoggersプロパティもあります。この場合、両方を確認する必要があります。

6
rsp

Apache commons loggingをlog4jで使用していて、log4jが期待どおりに機能しないためにここに来ている場合は、実行時クラスパスに実際にlog4j.jarがあることを確認してください。あの人はしばらく困惑させられました。開発環境でランナーを構成して、Javaコマンドラインに-Dlog4j.debugを含めるようにしました。これにより、Log4jが正しく初期化されていることを常に確認できます

5
Glenn Lawrence

ロガーレベルを表示する最低レベルに設定する必要があります。たとえば、DEBUGメッセージを表示する場合は、ロガーレベルをDEBUGに設定する必要があります。

Apache log4j manual には設定に関するセクションがあります。

3
Thomas Owens

ローリングファイルアペンダーを使用して、ログ情報をファイルに書き込むのが好きです。私のlog4jプロパティファイルは通常、次のようになります。パッケージごとにさまざまなレベルのロギングが必要な場合に、パッケージ固有のロギングを作成するのが好きなので、この方法を好みます。この例では、1つのパッケージのみに言及しています。

log4j.appender.RCS=org.Apache.log4j.DailyRollingFileAppender
log4j.appender.RCS.File.DateFormat='.'yyyy-ww
#define output location
log4j.appender.RCS.File=C:temp/logs/MyService.log
#define the file layout
log4j.appender.RCS.layout=org.Apache.log4j.PatternLayout
log4j.appender.RCS.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm a} %5 %c{1}: Line#%L - %m%n
log4j.rootLogger=warn
#Define package specific logging
log4j.logger.MyService=debug, RCS
3
ChadNC

これは、ロガーのログレベルが「エラー」に設定されているために発生しています。したがって、重大度の点でエラーメッセージまたはこのレベル以上しか表示されないため、「致命的な」メッセージも表示されます。

Log4j.xmlでロガーのログレベルを「デバッグ」に設定すると、すべてのメッセージが表示されます。

log4j の説明を参照してください。

2
TomY