编程语言
首页 > 编程语言> > java – 什么决定log4j TimeBasedRollingPolicy何时翻转?

java – 什么决定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日日志的文件中.

标签:java,log4j,rollingfileappender
来源: https://codeday.me/bug/20190621/1255451.html