2017-07-27 212 views
1

我使用log4jlog4j.extras創建兩個條件滾動的RollingFileAppender進行:如何設置RollingFileAppender的最大總磁盤大小?

  1. 工作文件大小超過MaxFileSize閾值。
  2. 系統的日期發生變化。

this guide,該附加器需要既TimeBasedRollingPolicySizeBasedTriggeringpolicy,例如:

<appender name="file_logger" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
     <param name="ActiveFileName" value="/fxh/logs/D3FIXFeeds.log" /> 
     <param name="FileNamePattern" value="/fxh/logs/D3FIXFeeds.%d{HH-mm}.%i.log" />   
    </rollingPolicy> 
    <triggeringPolicy 
     class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy"> 
     <param name="MaxFileSize" value="50000" /> <!-- in bytes --> 
    </triggeringPolicy> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n" /> 
    </layout> 
</appender> 

如何設置一個最高限額的日誌輸出的總磁盤空間?例如,假設我們的服務器管理員爲這個應用程序分配了40GB的日誌,那麼是否有指定這個給定的雙滾動策略?

到目前爲止,我發現的最接近的是maxBackupIndex參數。我不能活動得到這個工作...例如,這些都不在只有五個文件截斷日誌:

<appender name="file_logger" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <param name="MaxBackupIndex" value="5"/>  
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
      <param name="ActiveFileName" value="/fxh/logs/D3FIXFeeds.log" /> 
      <param name="FileNamePattern" value="/fxh/logs/D3FIXFeeds.%d{HH-mm}.%i.log" />  
      ... 

也不

<appender name="file_logger" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
      <param name="ActiveFileName" value="/fxh/logs/D3FIXFeeds.log" /> 
      <param name="FileNamePattern" value="/fxh/logs/D3FIXFeeds.%d{HH-mm}.%i.log" /> 
      <param name="MaxBackupIndex" value="5"/>  
      ... 
+0

我會說使用log4j v1你不能控制整個日誌文件的大小,只有在他們已經添加log4j2 v2.5刪除行動可以用來刪除日誌基於整體大小或最後一個日誌文件的時間戳。 – Babl

回答

2

正如@Arigion所說,看起來不像log4j可以做你所問的,但幸運的是Logback可以。它提供了SizeAndTimeBasedRollingPolicytotalSizeCap允許你創建與大小和時間滾動服從總存儲限制原木,如下:

<appender name="file_logger" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
<file>/fxh/logs/D3FIXFeeds.log</file> 
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
    <!-- rollover daily --> 
    <fileNamePattern>/fxh/logs/D3FIXFeeds.%d{HH-mm}.%i.log</fileNamePattern> 
    <maxFileSize>500KB</maxFileSize>  
    <maxHistory>60</maxHistory> 
    <totalSizeCap>40GB</totalSizeCap> 
</rollingPolicy> 
<encoder> 
    <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p - %m%n</pattern> 
</encoder> 
</appender> 

這不是因爲我只是用一個工作示例最好的猜測爲領域,但讓我知道它是如何去。

1

根據thisTimeBasedRollingPolicy不起作用與MaxBackupIndex。您可以使用TimeAndSizeRollingAppender。它有一個日誌文件翻轉時間或日期,最大文件大小最大備份文件數參數。

我不認爲有一個log4j appender它遵守總目錄的大小。在我看來,這更像是一項家務工作,而不是記錄員。甚至不是logrotate這是更通用的日誌appender提供目錄大小限制。 你可以使用一個外部腳本(例如由cron觸發)來執行目錄清理。