我试图找到一个现成的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分钟后,同一文件中的内容将被更改
我只想简单地写入日志而不必每次都重命名文件。 我希望我清楚自己。
答案 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>