【问题标题】:What determines when a log4j TimeBasedRollingPolicy rolls over?什么决定了 log4j TimeBasedRollingPolicy 何时翻转?
【发布时间】:2011-03-25 15:16:16
【问题描述】:

我正在通过 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 更改时文件应该滚动?

谢谢!

保罗

【问题讨论】:

    标签: java log4j rollingfileappender


    【解决方案1】:

    好吧,我必须仔细检查,但我会说,只要使用格式字符串格式化当前日期生成的字符串发生更改,文件就会滚动。这意味着:如果您使用“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 日日志的文件中。

    【讨论】:

    • 你是绝对正确的。我不知道为什么我以前没有这样做,但我检查了source code 的 TimeBasedRollingPolicy 并且在翻转的逻辑中是注释“如果文件名没有改变,则没有翻转”。谢谢!
    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多