簡體   English   中英

如何在 Log4j 中啟用 Logger.debug()

[英]How to enable Logger.debug() in Log4j

在嘗試執行以下幾行時,只顯示最后兩條語句(“這里有一些錯誤”和“這里有一些 FATAL”),前三個語句沒有顯示。我剛開始學習這個主題,誰能告訴為什么會這樣?

    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

您可能在項目的某處有一個 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

第一行將根記錄器的日志級別設置為“信息”,即只有信息、警告、錯誤和致命會打印到控制台(這是在其下方定義的附加程序)。

最后一行設置 com.example.* 的記錄器(如果您通過LogFactory.getLogger(getClass())獲取記錄器)將處於調試級別,即 debug 也將被打印。

這是我偶爾用來臨時打開 JUnit 測試中的 log4j 調試日志記錄的快速單行 hack:

Logger.getRootLogger().setLevel(Level.DEBUG);

或者如果您想避免添加導入:

org.apache.log4j.Logger.getRootLogger().setLevel(
      org.apache.log4j.Level.DEBUG);

注意:此 hack 在 log4j2 中不起作用,因為setLevel已從 API 中刪除,並且似乎沒有等效的功能。

將名為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>

這可能是因為您的 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

此處使用CONSOLE appender 將rootLogger設置為ERROR級別。

請注意,某些附加程序(如控制台附加程序)也有一個Threshold屬性,可用於否決rootLoggers級別。 在這種情況下,您需要檢查兩者。

如果您來到這里是因為您使用帶有 log4j 的 Apache commons 日志記錄並且 log4j 沒有按預期工作,那么請檢查您的運行時類路徑中是否確實有一個 log4j.jar。 那個讓我疑惑了一會兒。 我現在已經在我的開發環境中配置了運行器,在 Java 命令行中包含-Dlog4j.debug ,所以我總是可以看到 Log4j 正在正確初始化

您需要將記錄器級別設置為要顯示的最低級別。 例如,如果要顯示 DEBUG 消息,則需要將記錄器級別設置為 DEBUG。

Apache log4j 手冊有一節是關於配置的。

我喜歡使用滾動文件附加程序將日志信息寫入文件。 我的 log4j 屬性文件通常看起來像這樣。 我更喜歡這種方式,因為我喜歡進行包特定的日志記錄,以防我需要為不同的包進行不同程度的日志記錄。 示例中只提到了一個包。

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

發生這種情況是因為您的記錄器的日志記錄級別設置為“錯誤” - 因此您只會看到錯誤消息或在嚴重性方面高於此級別,因此這就是您也會看到“致命”消息的原因。

如果您在 log4j.xml 中的記錄器上將日志記錄級別設置為“調試”,您應該會看到所有消息。

查看log4j介紹以進行解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM