我正在使用log4j
和log4j.extras
创建一个在两个条件下滚动的RollingFileAppender:
MaxFileSize
阈值。关注this guide后,appender需要TimeBasedRollingPolicy
和SizeBasedTriggeringpolicy
,例如:
<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 :(得分:2)
正如@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>
这不是一个有效的例子,因为我只是对字段使用了最佳猜测,但让我知道它是怎么回事。
答案 1 :(得分:1)
根据this帖子 TimeBasedRollingPolicy不适用于MaxBackupIndex 。
但你可以使用TimeAndSizeRollingAppender。它有日志文件按时间或日期滚动,最大文件大小和最大备份文件数参数。
我认为没有log4j appender可以观察总目录大小。在我看来,这更像是一个家政工作而不是记录器。甚至不是logrotate,它更通用于日志追加器提供目录大小限制。 您可以使用外部脚本(例如,由cron触发)来执行目录清理。