1

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

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

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

4

1 回答 1

3

使用标准 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>
于 2012-06-10T09:14:27.810 回答