我能夠在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"));
您是否考慮將初始化邏輯移至過濾器或完整的servlet的初始化階段? – 2011-03-28 18:57:01