log4j禁用基于大小滚动创建文件

时间:2012-06-10 08:49:06

标签: log4j

我试图找到一个现成的jar /类,它给了我选项 启用log4j根据文件大小无限地写入文件,我的意思是: 将log4j配置为: 1.写入日志文件,直到文件大小为10兆 2.当文件达到10兆时,它将被重命名为“file _”+当前日期后缀,就是这样。 3.启动新的日志文件转到1

每次文件达到10240KB时,它会将文件engine.log重命名为engine_1.log
然后当主engine.log再次到达10240KB时 它将engine_1.log重命名为engine_2.log
和engine.log到engine_1.log等等。
这是我想要避免的动作!
它引起的问题例如:
所以,如果我查看engine_1.log中的内容,10分钟后,同一文件中的内容将被更改

我只想简单地写入日志而不必每次都重命名文件。 我希望我清楚自己。

1 个答案:

答案 0 :(得分:3)

使用标准Log4j库无法实现此目的,但它在Log4j Extras Companion库中实现,该库是一个单独的JAR文件,可以下载from here

标准RollingFileAppender根据日志文件大小执行日志轮换(或滚动)。如果日志文件达到指定的大小限制,则会启动新的日志文件,并且旧的日志文件将重命名为_1后缀。现有的存档日志也将使用_2_3等后缀进行轮换。

您需要覆盖此默认日志文件命名策略,以使用存档日志文件名中的当前日期而不是计数器。可以使用TimeBasedRollingPolicy过滤器(here is the documentation)配置此项。

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

我从official Log4J wiki获取了此示例配置(请参阅页面底部的过滤器配置更多示例部分)。

<强>更新

extras库中的RollingFileAppender类没有适当的属性来设置旧的RollingFileAppender所具有的最大日志文件大小。可以使用触发策略指定此属性,在这种情况下应使用SizeBasedTriggeringPolicy(文档is here)。触发策略的配置与滚动策略的配置相同(我只显示相关部分):

<appender ...>
    ...
    <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy">
        <param name="MaxFileSize" value="10000000" />
    </triggeringPolicy>
    ...
</appender>