我正在从 Log4J Extras 设置一个 TimeBasedRollingPolicy
,但我不清楚是什么告诉策略何时翻转。 The API不是明确的,所以我只是在做推论。听起来像是 FileNamePattern
中决定频率的最后一个元素。
以 log4j Wiki 中的这个例子为例:
<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">
<!-- The active file to log to -->
<param name="file" value="/applogs/myportal/portal.log" />
<param name="append" value="true" />
<param name="encoding" value="UTF-8" />
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<!-- The file to roll to, this is a fairly intelligent parameter, if the file
ends in .gz, it gzips it, based on the date stamp it rolls at that time,
default is yyyy-MM-dd, (rolls at midnight)
-->
<param name="FileNamePattern" value="/applogs/myportal/portal.%d.log.gz" />
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" />
</layout>
</appender>
我是否假设因为模式以 dd
结尾,所以策略是在它发生变化时滚动?与 API 中的示例相同,yyyy-MM
的模式意味着当 MM
更改时文件应该滚动?
谢谢!
保罗
最佳答案
好吧,我必须仔细检查一下,但我想说的是,每当使用格式字符串格式化当前日期所生成的字符串发生变化时,文件就会滚动。这意味着:如果您使用“yyyy-MM-dd”格式化日期,结果每天都会改变。仅“dd”也会发生这种情况,但是您每个月都会获得相同的文件名,因此文件要么被覆盖,要么被附加或滚动失败,因为文件已经存在(不确定哪个是真的,取决于什么appender 会,我猜在这种情况下日志将被附加,除了 gzip 方式之外)。
编辑:
示例:如果您有 mylog.%d{dd}.log
,则今天 (2011-03-27) 生成的日志文件的名称为 mylog.25.log
(由于在记录时格式化 new Date())并将消息附加到该文件。明天,现在使用的文件将具有名称 mylog.26.log
。在 4 月 25 日,您将再次获得文件名“mylog.25.log”,因此当天的所有日志都将附加到已包含 3 月 25 日日志的文件中。
关于java - 什么决定了 log4j TimeBasedRollingPolicy 何时翻转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434410/