2010-11-23 44 views
13

我的Java應用程序引用使用log4j日誌記錄的第三方jar文件。問題是這個jar包含它自己的log4j.properties文件,這個文件在我的機器上導致拒絕訪問異常,但我無法控制jar文件來更改它的內容。覆蓋log4j.properties

我已經嘗試在我的應用程序的類路徑中添加我自己的log4j.properties文件,但它似乎沒有效果。如果我嘗試使用PropertyConfigurator以編程方式導入自己的設置,log4j似乎首先加載jar文件的屬性文件(導致異常)。

如何短路log4j忽略第三方jar文件的log4j.properties文件並使用我自己的?

回答

15

有覆蓋log4j.properties幾種方式,其中之一是:

  • 使用的log4j.xml 請看擴展

另一種方法是:

  • 將系統屬性設置爲log4j.defaultInitOverride 然後「false」將導致log4j跳過默認的初始化過程(此過程)。
  • 將資源字符串變量設置爲log4j.configuration系統屬性的值。指定默認初始化文件的首選方法是通過log4j.configuration系統屬性。如果未定義系統屬性log4j.configuration,則將字符串變量資源設置爲其默認值「log4j.properties」。
  • 嘗試將資源變量轉換爲URL。
  • 如果資源變量無法轉換爲URL(例如,由於MalformedURLException),則通過調用org.apache.log4j.helpers.Loader.getResource(resource,Logger.class)從類路徑中搜索資源返回一個URL。請注意,字符串「log4j.properties」構成格式不正確的URL。請參閱Loader.getResource(java.lang.String)以獲取搜索的位置列表。
  • 如果找不到URL,請中止默認初始化。否則,從URL配置log4j。 PropertyConfigurator將用於解析URL以配置log4j,除非URL以「.xml」擴展名結尾,在這種情況下將使用DOMConfigurator。你可以選擇指定一個自定義配置器。 log4j.configuratorClass系統屬性的值將作爲自定義配置程序的完全限定類名稱。您指定的自定義配置器必須實現配置器界面。

編號:http://logging.apache.org/log4j/1.2/manual.html

+0

的URL指的Log4j的生活版本的結束。最接近的是:https://logging.apache.org/log4j/2.x/manual/configuration.html#SystemProperties – 2017-12-05 14:38:08