什么决定 log4j TimeBasedRollingPolicy 何时滚动?

Pau*_*aul 6 java log4j rollingfileappender

TimeBasedRollingPolicy我正在从Log4J Extras设置一个,但我不清楚什么告诉政策何时滚动。 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>
Run Code Online (Sandbox Code Playgroud)

我是否可以假设因为模式以 结尾dd,所以策略会在变化时滚动?与 API 中的示例相同,模式 意味着yyyy-MM文件在MM更改时应该滚动?

谢谢!

保罗

Tho*_*mas 5

好吧,我必须仔细检查,但我想说,每当使用格式字符串格式化当前日期生成的字符串发生变化时,文件就会滚动。这意味着:如果您使用“yyyy-MM-dd”格式化日期,结果每天都会改变。仅使用“dd”也会发生这种情况,但是您每个月都会得到相同的文件名,因此文件要么被覆盖,要么被追加,要么滚动失败,因为文件已经存在(不确定哪个是真的,取决于什么)附加程序确实如此,我想在这种情况下,日志将被附加,除了 gzip 方式之外)。

编辑:

示例:如果您有mylog.%d{dd}.log,则今天 (2011-03-27) 生成的日志文件具有该名称mylog.25.log(由于日志记录时格式化 new Date())并将消息附加到该文件。明天,现在使用的文件的名称将是mylog.26.log. 4 月 25 日,您将再次获得文件名“mylog.25.log”,因此当天的所有日志都将附加到已包含 3 月 25 日日志的文件中。