java - 什么决定了 log4j TimeBasedRollingPolicy 何时翻转?

标签 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 更改时文件应该滚动?

谢谢!

保罗

最佳答案

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

关于java - 什么决定了 log4j TimeBasedRollingPolicy 何时翻转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434410/

相关文章:

java - 使用 log4j 通过 SMTPAppender 发送电子邮件报告

java - 带有 `--multi-release` 选项的 jdeps 命令使用失败

logging - 具有复合滚动样式的Log4Net RollingFileAppender将覆盖数据

Log4Net:滚动文件附加器,定义扩展名

java - 使用 Java 中的 Obj-C 类,有办法吗?

java - jetty-runner/stats 端点只能在本地主机上使用,如何打开网络?

log4j - weblogic 中具有多个 log4j.xml 的多个应用程序

java - 尝试创建 log4j2 rollingfileappender 时出错

java - 如何在 JTextPane 中将每个字符设置为不同的颜色/背景颜色?

java - 无法下载 JDK 8