如何设置滚动文件追加程序的最大总磁盘大小?



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

  1. 工作文件大小超过MaxFileSize阈值。
  2. 系统的日期会更改。

按照本指南,追加器需要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"/>    
...

正如@Arigion所说,看起来 log4j 不能做到你的要求,但幸运的是 Logback 可以。它提供了 SizeAndTimeBasedRollingPolicy 和 totalSizeCap,允许您创建随大小和时间滚动并遵守总存储限制日志,如下所示:

<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>

这不是一个工作示例,因为我只是对字段使用了最佳猜测,但请告诉我它是怎么回事。

根据这篇文章,TimeBasedRollingPolicy不适用于MaxBackupIndex

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

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

相关内容

最新更新