如何设置RollingFileAppender的最大总磁盘大小?

时间:2017-07-27 20:55:22

标签: java log4j

我正在使用log4jlog4j.extras创建一个在两个条件下滚动的RollingFileAppender:

  1. 工作文件大小超过MaxFileSize阈值。
  2. 系统的日期更改。
  3. 关注this guide后,appender需要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"/>    
               ...
    

2 个答案:

答案 0 :(得分: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 :(得分:1)

根据this帖子 TimeBasedRollingPolicy不适用于MaxBackupIndex

但你可以使用TimeAndSizeRollingAppender。它有日志文件按时间或日期滚动最大文件大小最大备份文件数参数。

我认为没有log4j appender可以观察总目录大小。在我看来,这更像是一个家政工作而不是记录器。甚至不是logrotate,它更通用于日志追加器提供目录大小限制。 您可以使用外部脚本(例如,由cron触发)来执行目录清理。