什么决定log4j TimeBasedRollingPolicy何时翻转?

时间:2011-03-25 15:16:16

标签: java log4j rollingfileappender

我正在从 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更改时滚动?

谢谢!

2 个答案:

答案 0 :(得分:3)

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

编辑:

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

答案 1 :(得分:2)

我得到了这个工作。下面是log4j的代码。您只需要在pom.xml中添加log4j-extras依赖项并使用以下代码: 以下代码每分钟滚动一次并创建.zip文件。

        

<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">    
    <param name="FileNamePattern" value="/opt/app/srdotcom/logs/portal.%d{yyyy-MM-dd-HH-mm}.log.zip" />
</rollingPolicy>

<layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{YYYY-MM-dd HH:mm:ss:SSS z}| %c{2}| %m%n" />
</layout>

Maven依赖关系:

  <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>apache-log4j-extras</artifactId>
        <version>1.2.17</version>
    </dependency>