Log4j 不輸出 Log 到指定的路徑

前陣子一直卡在這個問題

console 都將紀錄印出來了,

怎麼一直沒將 log 印到 log4j.xml 中 appender 標籤內我設定的 File 裡? 

 log4j.xml 負責輸出的 appender 部分: 

<appender name="File" class="org.apache.log4j.DailyRollingFileAppender">

        <param name="File" value="./logs/projectName.log" />

        <param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />

        <layout class="org.apache.log4j.PatternLayout">

            <param name="ConversionPattern" value="[%d{yy/MM/dd HH:mm:ss}][%p][%C-%L] %m%n" />

        </layout>

</appender>

  

 

又 google 了下,

整理了幾個可能造成此問題發生的要因或是解法 (小弟用的 server 是 Tomcat 

 

1.Tomcat 有沒有權限去動 appender 中路徑的資源?

2.確認有沒有暫存檔在你的 Tomcat 資料夾中

   刪掉 %CATALINA_HOME%\webapps 中的 expanded war

             %CATALINA_HOME%\temp , %CATALINA_HOME%\work

             這兩個資料夾裡面的內容

   P.S %CATALINA_HOME% 就是你 tomcat 的根目錄

3. 確認有沒有其他的 log4j 設定檔在你的 classpath 中

    因為可能會覆蓋掉本來的設定

4. 將本來 File 輸出的 路徑第一個 . 改成  ${catalina.home} 

 

根據我總是因為 java 以及各框架的 jar 檔路徑鬼打牆數日的經驗

大膽猜測肯定是路徑出了問題

選了 4 .

直接將 File 輸出參數路徑的 value 改成:

<param name="File" value="${catalina.home}/logs/projectName.log" />

 

成功!

 

P.S

a. 2 跟 3 都檢查過了, 沒這種現象發生,  1 老實說不知道從哪裡找權限

b. 注意 param "File" 的 value 中指向的檔案我是有另外建立的, 

    一定時間內產生的 log 檔案 會以param "DataPattern" 中設定的格式產生 

 

參考資料:

https://stackoverflow.com/questions/31990884/log4j-doesnt-write-logs-to-file

http://bbs.csdn.net/topics/330047225