Log4j 1 2 15路徑替換乙個bug

2021-08-30 18:25:59 字數 1924 閱讀 9323

那怎麼在自己的應用裡實現呢? 我們看看org.apache.log4j.xml.domconfigurator的類圖,發現它提供了乙個protected string subst()方法,protected是乙個很好的暗示,它暗示著我們可以過載此方法,用自己的props。看看自己寫的類吧:

log4j的domconfigurator的subst實現

/**

* substitutes property value for any references in expression.

** @param value value from configuration file, may contain

* literal text, property references or both

* @return evaluated expression, may still contain expressions

* if unable to expand.

*/protected string subst(final string value) catch (illegalargumentexception e)

}

public class domconfigurator extends org.apache.log4j.xml.domconfigurator 

/*** 建立新物件。

** @param props 可在配置檔案中被引用的屬性

*/public domconfigurator(properties props)

/*** 使用xml檔案配置log4j。

** @param filename 配置檔名

* @param props 可在配置檔案中被引用的屬性

*/public static void configure(string filename, properties props)

/*** 設定屬性,這些屬性可以在配置檔案中被引用。

** @param props 屬性

*/public void setproperties(properties props)

/*** 替換字串值,將其中的$替換成具體的值。

** @param value 要替換的值

** @return 替換後的值

*/protected string subst(string value) catch (illegalargumentexception e)

}}

忽然某一天,你發現這個功能不能用了,想了半天,哪也沒改嗎? 沒辦法,debug吧,找問題根源的利器,最後你發現別人公升級了log4j的版本,log4j 1.2.15。 那就對了,這是log4j-1.2.15的乙個bug,它導致了路徑替換功能的失效,因為1.2.15版本的domconfigurator又提供了一套static的方法實現,如下面為它的**:

protected  void setparameter(element elem, propertysetter propsetter) 

public static void setparameter(final element elem, final propertysetter propsetter, final properties props)

public static string subst(final string value, final properties props) catch (illegalargumentexception e)

}

在1.2.16後的版本已經解決了此問題,官網還有此bug的記錄:

log4j的路徑替換很好用,有點類似它內建的mdc功能,從而幫助我們分離開發、生產環境的配置。

----以下無內容----

乙個常用的log4j日誌檔案

根logger,指定把info級別及以上的日誌資訊輸出到d輸出地和error輸出地 log4j.rootlogger info,d,error 定義d輸出地的相關資訊 定義d輸出地的輸出中過濾掉error級別的資訊,因為acceptonmatch false 定義error輸出地的相關資訊 自定義子...

LOG4J配置詳解及樣例乙個

要發布了,為了跟蹤一些日誌,需要用到log4j,於是就研究了一下log4j的配置 先貼自己用的乙個配置原始檔 log4j.properties log4j.rootlogger debug,console,file for console for file 下面進行重點講解 log4j.rootlo...

LOG4J配置詳解及樣例乙個

要發布了,為了跟蹤一些日誌,需要用到log4j,於是就研究了一下log4j的配置 先貼自己用的乙個配置原始檔 log4j.properties html view plain copy print?log4j.rootlogger debug,console,file for console for...