2016-01-21 52 views
1

我在log4j2 XML以下設置SizeBasedTriggeringPolicy限制無法正常工作

<Appenders> 
     <RollingFile fileName="C:\logs\Fatal.log" filePattern="C:\logs\Fatal-%i.log" name="FatalFile"> 
      <Policies> 
       <SizeBasedTriggeringPolicy size="10 MB"/> 
      </Policies> 
      <PatternLayout pattern="[%d{ISO8601}] %-5level %logger{6} - %msg%n"/> 
     </RollingFile> 
</Appenders> 
時,我的代碼,持續時間長運行

,有7家數越來越創建,但,該日誌的大小開始增長超過後10MB限制,並且對於所有7個文件而言變得非常大。

我需要知道爲什麼只創建了7個文件,以及如何限制文件大小不會超過10 MB。

+0

我在我的配置中的jar有:log4j-1.2-api-2.0-beta8.jar,log4j-api-2.0- beta8.jar,log4j-core-2.0-beta8.jar –

+0

這個Log4j版本很舊。你可以嘗試升級到2.5或至少2.3,如果你仍然在Java 6上。 – rgoers

回答

0

DefaultRolloverStrategy在同一天創建最多7個存檔。文件大小超過10 MB可能是您使用的舊版本Log4j 2中的一個錯誤。

從2.5開始,Log4j支持在每次翻轉時執行的custom Delete action

您可以控制哪些文件被任意組合刪除:

  1. 名稱(匹配globregex
  2. Age( 「刪除,如果14天以上」)
  3. 計數(「僅保留最近的3個」)
  4. 大小(「僅保留最近的文件高達500MB」)

需要更細緻地控制要刪除哪些文件的用戶可以使用任何受支持的JSR-223腳本語言來指定腳本條件。

請查看documentation,它有三個完整的示例可能有用。

另外,請注意,您可以compress log files on rollover使它們佔用更少的磁盤空間。

最後,要小心!沒有辦法恢復這種方式刪除的文件。 :-)

+0

謝謝!這有很大幫助。 –

+0

這是對此的跟進。如果在多個會話中使用相同的日誌文件,SizeBasedTriggeringPolicy策略會失敗。 –

0

我觀察到完全相同的行爲。但將「append」屬性設置爲「false」後,RollingFile appender表現得如我所願。如果「append」的默認值是「false」,那麼它可能會更好...

+0

Append = true是默認值,因爲它更安全:它不會覆蓋舊的日誌文件。 –