簡體   English   中英

log4j 在哪里/如何查找 log4j.properties 文件?

[英]Where/how does log4j look for a log4j.properties file?

我正在一個簡單的測試應用程序中試用 log4j。 我在 eclipse 中創建了一個新的 Java 項目,並將 log4j JAR (v1.2.16) 添加到我的構建路徑中。 然后我創建了一個打印 Hello World 的簡單類。 然后我使用 log4j Logger類來記錄信息消息。 當我運行應用程序時,我看到日志消息,使用我假設的默認附加程序和布局。 偉大的。 我遇到的問題是添加我自己的配置。 這就是我所做的:

創建了一個帶有自定義附加程序和日志級別的 log4j.properties 文件,並將其放入 src 文件夾(編譯時將其復制到 bin 文件夾)。 運行應用程序 - 沒有變化。

我嘗試添加PropertyConfigurator.configure("log4j.properties") 運行應用程序 - 沒有變化。 沒有錯誤,但沒有變化。

我該怎么做才能讓 log4j 加載我的配置文件?

查看“ 默認初始化程序”標題下的手冊,您將在其中找到以下內容:

確切的默認初始化算法定義如下:

  1. log4j.defaultInitOverride系統屬性設置為“ false ”以外的任何其他值將導致 log4j 跳過默認初始化過程(此過程)。
  2. 將資源字符串變量設置為log4j.configuration系統屬性的值。 指定默認初始化文件的首選方法是通過log4j.configuration系統屬性。 如果系統屬性 log4j.configuration 未定義,則將字符串變量資源設置為其默認值log4j.properties ”。
  3. 嘗試將資源變量轉換為 URL。
  4. 如果資源變量無法轉換為 URL,例如由於 MalformedURLException,則通過調用返回 URL 的 org.apache.log4j.helpers.Loader.getResource(resource, Logger.class) 從類路徑中搜索資源. 請注意,字符串“ log4j.properties ”構成了格式錯誤的 URL。 有關搜索位置的列表,請參閱Loader.getResource(java.lang.String)
  5. 如果找不到 URL,則中止默認初始化。 否則,從 URL 配置 log4j。 PropertyConfigurator將用於解析 URL 以配置 log4j,除非 URL 以“ .xml ”擴展名結尾,在這種情況下將使用DOMConfigurator 您可以選擇指定自定義配置器。 log4j.configuratorClass系統屬性的值被視為自定義配置器的完全限定類名。 您指定的自定義配置器必須實現Configurator接口。

啊。 我發現問題是 eclipse 導入了錯誤的Logger類。 它導入了 java.util.logging.Logger ,當然它有自己的配置,與 log4j 不同。 哦,好吧,希望其他人這樣做並通過閱讀這個問題來解決它。

您可以通過設置log4j.debug系統屬性來啟用 log4j 內部調試。 除此之外,這將導致 log4j 顯示它如何配置自身。

您可以嘗試使用log4j.configuration系統屬性顯式設置配置文件的 URL。

另見: 這個問題

如果定義了classpath ,問題可能出在classpath classpath中。

它沒有加載的原因(在我的情況下):我的一個 jar 中有一個沖突的log4j.properties文件,並且它重載了我的classpath中的那個。

簡而言之,如果您的log4j.properties文件未加載,則可能在其他地方有另一個覆蓋它的文件。

只是想我也會把它扔進去,以防其他人遇到這個。 我剛剛花了最后 5 個小時試圖弄清楚為什么我的默認log4j.properties無法加載。

log4j.properties應該在您的類路徑中。 復制到“bin 文件夾”的“src 文件夾”(我假設您在這里說的是 Eclipse 設置),通常屬於您的類路徑,因此應該可以找到它(您是否將它放在“src " 文件夾,對嗎?)

我知道這已經有幾個月了,但我覺得有必要指出 scr 文件夾沒有“復制”到 bin 文件夾,也不是運行時類路徑的一部分......(構建路徑不是運行時類路徑!)。 Eclipse 將 src 文件夾中的源文件編譯到 bin(或任何您喜歡的)文件夾中。 bin 文件夾是運行時類路徑的一部分。

只是想指出這一點,因為這些線程也經常被非常初級的程序員閱讀,我總是很沮喪,因為他們中的大多數人沒有掌握 Java 類路徑的技巧,因此對它犯了可以避免的錯誤。

只是將它扔給任何正在努力加載 log4j.properties 的人。

我通過添加以下行來修復我的:

-Dlog4j.defaultInitOverride=TRUE

原來使用該 JVM 參數,可以告訴 Log4j 不要使用Default Initialization Procedure並創建自己的。

我和我的斗爭。 我從干凈的 JAR 構建到整個 REPO 拉取,沒有任何效果。 結合它和清理類文件使它工作。

暫無
暫無

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

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