什么决定log4j TimeBasedRollingPolicy何时翻转?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么决定log4j TimeBasedRollingPolicy何时翻转?相关的知识,希望对你有一定的参考价值。

我正在从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(由于在记录时格式化新的Date())并将消息附加到该文件。明天,现在使用的文件名为mylog.26.log。 4月25日你再次获得文件名`mylog.25.log,因此那天的所有日志都将附加到已经包含3月25日日志的文件中。

另一答案

我得到了这个工作。下面是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>

以上是关于什么决定log4j TimeBasedRollingPolicy何时翻转?的主要内容,如果未能解决你的问题,请参考以下文章

log4j输出日志级别控制

log4j 写入控制台但不写入文件(Liferay + Tomcat)

log4j写入控制台但不写入文件(Liferay + Tomcat)

Log4j的简单教程

Log4j的简单教程

日志框架