使用标准 Log4j 库无法实现这一点,但它在Log4j Extras Companion库中实现,这是一个单独的 JAR 文件,可以从此处下载。
标准RollingFileAppender
基于日志文件大小执行日志轮换(或滚动)。如果日志文件达到指定的大小限制,则会启动一个新的日志文件,并将旧的日志文件重命名为具有_1
后缀。现有存档日志也将使用_2
、_3
等后缀进行轮换。
您需要覆盖此默认日志文件命名策略,以使用存档日志文件名中的当前日期而不是计数器。这可以使用TimeBasedRollingPolicy
过滤器进行配置(这里是文档)。
修改您的 Log4J 配置文件 ( log4j.xml ):
<appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender">
<param name="Threshold" value="DEBUG"/>
<param name="File" value="engine.log"/>
<param name="Append" value="true"/>
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="engine_%d.log" />
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ISO8601} %t %-5p [%c{1}] %m%n "/>
</layout>
</appender>
我从官方 Log4J wiki中获取了这个示例配置(请参阅页面底部的过滤器配置和更多示例部分)。
更新:
extras 库中的RollingFileAppender
类没有像旧的那样设置最大日志文件大小的适当属性RollingFileAppender
。可以使用触发策略指定此属性,在这种情况下SizeBasedTriggeringPolicy
应该使用(文档在此处)。触发策略的配置与滚动策略相同(我只展示相关部分):
<appender ...>
...
<triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
<param name="MaxFileSize" value="10000000" />
</triggeringPolicy>
...
</appender>