2011-03-28 32 views
0

我有一個Web應用程序,在JSP中的一個包含:「的log4j:WARN請初始化log4j的系統正確」的錯誤

PropertyConfigurator.configure(System.getenv("MY_HOME") + "/cfg/log4j.properties"); 

我反覆檢查MY_HOME是建立

Tomcat的web服務器說:

log4j:WARN No appenders could be found for logger (com.mycompany.data.JobData). 
log4j:WARN Please initialize the log4j system properly. 

相同的設置在其他服務器之一工作正常。

任何提示?

的問題是,沒有日誌創建

+0

您是否考慮將初始化邏輯移至過濾器或完整的servlet的初始化階段? – 2011-03-28 18:57:01

回答

1

的PropertyConfigurator之前在您的系統的任何嘗試登錄,避免此警告必須被調用。您可能會發現在命令行上設置log4j配置更可靠。

或者您可以忽略警告。 ;)

順便說一句:你不想太頻繁地調用這個方法,理想情況下只有一次。

+0

爲什麼完全相同的設置在不同的環境中工作? – JAM 2011-03-28 18:06:52

+0

啓動可能會有所不同,因此在調用此行之前它不記錄任何內容。安裝程序可能幾乎相同,但是不同的OS/JVM版本/ CPU /磁盤速度可能會影響開始的順序。 – 2011-03-28 18:09:08

+0

在這種情況下,設置幾乎肯定會有所不同。 2個環境由不同的人建立並存在於不同的國家。你會如何解決這樣的問題? – JAM 2011-03-28 18:10:37

2

與您的答案無關,但這也有幫助。

如果它是一個Web應用程序,最簡單的方法是,以確保您的log4j.properties位於WEB-INF/classes文件夾中的文件WAR。當您的應用程序將被部署時,log4J將被配置。

0

我能夠在Apache Tomcat 6中運行Eclipse動態Web項目時找到解決此問題的解決方案。基本上,您需要從您的上下文中加載log4j屬性文件。

兩個基本步驟

(1)獲取log4j.properties文件到戰爭文件的「類目錄」。

(2)從當前上下文中讀取log4j屬性文件。我發現最好的方法是訪問當前線程的上下文並從那裏開始工作。

對於上面的第一步,修改Eclipse構建過程以添加最終將加載到war文件中的WEB-INF/classes目錄中的附加目錄。具體來說....

(1)在Eclipse中,右鍵單擊項目瀏覽器中的項目,選擇'新建' - >'文件夾'。您可以將文件夾命名爲任何內容,但本例中的標準是「資源」。新文件夾應顯示在項目的根目錄下。

(2)將log4j.properties文件移動到此新文件夾中。 (3)再次右鍵單擊項目,然後選擇'Build-Path' - >'Configure Build Path'。選擇「來源」選項卡。點擊「添加文件夾」按鈕。瀏覽以找到您在上面步驟(1)中創建的新文件夾。選擇「確定」。(4)回到eclipse Project Explorer視圖後,請注意該文件夾現在已經移動到'Java Resources'區域(即由於eclipse演示文稿抽象,它不再位於根目錄)。

(5)清理構建您的項目。 (6)要驗證.properties文件現在存在於WAR文件的WEB-INF/classes中,請將war文件導出到一個簡單的位置(右鍵單擊Project - > Export - > War file)並簽出內容。請注意,log4j.properties文件現在出現在WEB-INF/classes中。

現在進行上述第二步,訪問上下文以讀取文件。在嘗試讀取文件的位置添加以下代碼。請注意,這將從戰爭文件上下文中讀出,所以這個'應該'會在戰爭文件從服務器移動到服務器時起作用。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
PropertyConfigurator.configure(classLoader.getResourceAsStream("log4j.properties")); 
相關問題