Java 如何设置RollingFileAppender的最大总磁盘大小?
我正在使用Java 如何设置RollingFileAppender的最大总磁盘大小?,java,log4j,Java,Log4j,我正在使用log4j和log4j.extras创建一个RollingFileAppender,它在两种情况下滚动: 工作文件大小超过了MaxFileSize阈值 系统的日期更改 接下来,附加程序需要一个TimeBasedRollingPolicy和一个SizeBasedTriggeringpolicy,例如: <appender name="file_logger" class="org.apache.log4j.rolling.RollingFileAppender"> &
log4j
和log4j.extras
创建一个RollingFileAppender,它在两种情况下滚动:
MaxFileSize
阈值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>
也不是
...
根据postTimeBasedRollingPolicy不适用于MaxBackupIndex
但是你可以用这个。它有一个按时间或日期的日志文件滚动,最大文件大小和一个最大备份文件数参数
我不认为有一个log4j appender可以观察目录的总大小。在我看来,这更像是一项家政工作,而不是伐木工人的工作。甚至比日志追加器提供的目录大小限制更为通用。
您可以使用一个外部脚本(例如,由cron触发),它可以像这样进行目录清理 正如@Arigion所说,log4j似乎不能满足你的要求,但幸运的是,它能做到。它提供和,允许您创建随大小和时间滚动的日志,并遵守总存储限制,如下所示:
<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>
/fxh/logs/D3FIXFeeds.log
/fxh/logs/D3FIXFeeds.%d{HH mm}.%i.log
500KB
60
40GB
%d{yyyy-MM-dd HH:MM:ss}%-5p-%m%n
这不是一个有效的示例,因为我刚刚对字段使用了best guess,但请让我知道它是如何运行的。我想说,使用log4j v1,您无法控制日志文件的总体大小,只有在log4j2 v2.5中,他们添加了删除操作,该操作可用于根据最后一个日志文件的总体大小或时间戳删除日志。
<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"/>
...
<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>