Log4j調試

    log4j是項目中常常會使用到的一個日誌框架,在使用的過程當中,常常會遇到log4j配置文件衝突,或者打印出莫名其妙的日誌信息。這時 咱們就想要知道在當前環境中使用的是哪一個log4j配置文件,或者咱們想知道,在整個過程當中,Log4j作了哪些事情。這時,就須要咱們對Log4j進行 調試,打印出log4j的內部的日誌信息。java

    但是Log4j並不能使用Log4j自己輸出內部的日誌信息。在log4j內部提供了一個專門用於輸出log4j日誌的日誌工具--LogLog。這個類用於從log4j包裏面輸出日誌語句app

   Log4j components cannot make log4j logging calls. However, it is
   sometimes useful for the user to learn about what log4j is
   doing. You can enable log4j internal logging by defining the
   log4j.configDebug variable.

由LogLog的文檔說明上能夠知道,咱們能夠經過設置系統屬性log4j.configDebug=true來開啓輸出Log4j的日誌,log4j.configDebug變量已經被廢棄,如今使用log4j.debug替換。框架

    String value = properties.getProperty(LogLog.DEBUG_KEY);//LogLog.DEBUG_KEY --> log4j.debug
    if(value == null) {
      value = properties.getProperty("log4j.configDebug");
      if(value != null)
    LogLog.warn("[log4j.configDebug] is deprecated. Use [log4j.debug] instead.");
    }

    if(value != null) {
      LogLog.setInternalDebugging(OptionConverter.toBoolean(value, true));
    }

由上面代碼能夠看到,在加載log4j配置文件以前,先獲取LogLog.DEBUG_KEY(log4j.debug)的系統屬性值(再判斷log4j.configDebug的值,爲了向後兼容),若是該系統屬性有值,則經過LogLog.setInternalDebugging(OptionConverter.toBoolean(value, true));控制LogLog的是否輸出日誌的開關debugEnabled。之後輸出Log4j中的日誌時,就能夠經過該開關判斷是否須要輸出調試信息:工具

public static void debug(String msg) {
    if(debugEnabled && !quietMode) {
      System.out.println(PREFIX+msg);
    }
  }

開啓了輸出調試日誌時,會看到log4j的調試日誌以下:ui

-Dlog4j.debug=true
在啓動時,您會看到以下記錄輸出:
log4j: Trying to find [log4j.xml] using context classloader 
sun.misc.Launcher$AppClassLoader@136228.
log4j: Trying to find [log4j.xml] using sun.misc.Launcher$AppClassLoader@136228
 class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader 
sun.misc.Launcher$AppClassLoader@136228.
log4j.properties
log4j: Parsing for [root] with value=[WARN, A1].
log4j: Level token is [WARN].
log4j: Category root set to WARN
log4j: Parsing appender named "A1".
log4j: Parsing layout options for "A1".
log4j: Setting property [conversionPattern] to [%-4r [%t] %-5p %c %x - %m%n].
log4j: End of parsing for "A1".
log4j: Parsed "A1" options.
log4j: Finished configuring.

這樣,咱們就能夠很方便的看到,log4j使用的哪一個配置文件,及Appender的屬性。spa

相關文章
相關標籤/搜索