2013-07-19 47 views
0

我使用屬性文件從log4j切換爲使用xml,最後切換爲log4j2, ,因爲我想要日誌文件的時間戳。日誌文件中的數據與相應文件名中的時間戳之間的時間差異

<RollingFile name="File" fileName="log/${name}.log" 
     filePattern="log/${name}-%d{dd-MM-yyyy_HH.mm.ss}.log"> 
     <PatternLayout 
      pattern="${pattern}" /> 

     <Policies> 
      <OnStartupTriggeringPolicy>false</OnStartupTriggeringPolicy> 
      <SizeBasedTriggeringPolicy size="100 MB" /> <!-- Or every 100 MB --> 
     </Policies> 

    </RollingFile> 

我的問題是,由於日誌機制,我的問題是文件的時間戳是'新'的內容。即每次運行我的程序之後,會寫入一個文件${name}.log,如果已經有一個給定名稱的文件,則會創建一個文件log/${name}-%d{dd-MM-yyyy_HH.mm.ss}.log,並且將前一個文件的內容複製到該文件中。然後${name}.log被當前運行的記錄信息覆蓋。

因此,時間戳記日誌文件的內容與其名稱中給出的時間之間總是存在差異。

問題

是可以解決這個問題?如果是這樣,我需要配置什麼?


name.log:包含從第二運行數據

19-07-2013 13:10:58.462 [main] INFO main.App (App.java:60) 
Trying to print string! 

19-07-2013 13:10:58.467 [main] INFO main.App (App.java:61) 
Be aware! 

19-07-2013 13:10:58.467 [main] INFO main.App (App.java:63) 
String printed 

19-07-2013 13:10:58.467 [main] DEBUG main.App (App.java:64) 
Program executed! 

名稱-19-07-2013_ 58年10月13日的.log:包含從第一運行數據

19-07-2013 13:00:10.788 [main] INFO main.App (App.java:60) 
Trying to print string! 

19-07-2013 13:00:10.794 [main] INFO main.App (App.java:61) 
Be aware! 

19-07-2013 13:00:10.795 [main] INFO main.App (App.java:63) 
String printed 

19-07-2013 13:00:10.795 [main] DEBUG main.App (App.java:64) 
Program executed! 

個附加數據

Run #1 started at: 19-07-2013 13:00:10 
Run #2 started at: 19-07-2013 13:10:58 

Run #1 log file : name-19-07-2013_13.10.58.log 
Run #2 log file : name.log 

正如你所看到的,在第一次運行的日誌文件名取決於當第二次運行是 開始。我覺得這很刺激和誤導。

+0

問題在哪裏?文件名稱中的時間是文件轉出時的時間。之後,因爲新消息被髮送到正常的日誌文件,所以沒有附加新消息。 –

+0

問題是,當log4j2複製舊的'當前'文件的內容時,它應該將該文件的創建日期設置爲時間戳,而不是一些較新的日期,與包含的數據無關。至少我想要這樣配置它。但我不能。 – mike

+0

文件的日期與內容無關。*文件中給出的時間戳之前,文件中的所有日誌條目都是*。這是因爲'RollingFileAppender'將當前日誌文件重命名爲一個帶有時間戳(滾動)的文件,然後創建一個新文件創建新日誌文件。 –

回答

1

無法配置任何現有的appender來執行您想要的操作。

您可以使用FileAppender,但當它變得太大時它不會翻轉。

RollingFileAppender將永遠寫入fileName並將該文件的內容移動到一個與提供的模式條件滿足(所以它永遠不會創建具有指定樣式的文件,然後寫進去)。這意味着,從您的角度來看,文件的時間戳將始終位於文件中的最後一個日誌條目之後。這是設計。

要解決此問題,您必須編寫自己的appender。

+0

如果您決定編寫自己的appender,請考慮將其提供給log4j2,以便其他人也可以使用它。 –