【问题标题】:TimeBasedRollingPolicy not rolling unless there are new logs除非有新日志,否则 TimeBasedRollingPolicy 不会滚动
【发布时间】:2014-03-05 04:58:12
【问题描述】:

这是我的配置:

<appender name="myAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <append>true</append>
    <file>mylogs.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -->
        <fileNamePattern>mylogs-%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>

        <!-- keep 30 days' worth of history -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} [%thread] - %M:%L - %msg%n</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
</appender>

根据在此处找到的 logback 文档 (http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy) ,文件将根据我的 %d{yyyy-MM-dd_HH-mm} fileNamePattern 每分钟翻转一次。

我观察了它的工作原理,以下是我的发现:

  • 它不会很快创建日志文件。
  • 它只在新日志到达时创建前一分钟的日志文件。 (例如,我在晚上 11:53 有一个日志,现在是晚上 11:55,当它到达晚上 11:54 时,它不会立即为晚上 11:53 创建新的日志文件,但是当稍后出现新日志时,说晚上 11:56,它现在为晚上 11:53 创建文件。)

我是否遗漏了什么,我以为它会每分钟创建一个日志文件?

【问题讨论】:

    标签: java logging logback rollingfileappender


    【解决方案1】:

    在您链接的文档部分进一步向下滚动,您会发现:

    由于各种技术原因,翻转不是时钟驱动的,而是取决于日志记录事件的到来。例如,在 2002 年 3 月 8 日,假设 fileNamePattern 设置为 yyyy-MM-dd(每日翻转),午夜后第一个事件的到来将触发翻转。如果在午夜后的 23 分 47 秒内没有记录事件,则翻转实际上将发生在 3 月 9 日凌晨 00:23'47,而不是凌晨 0:00。因此,根据事件的到达率,翻转可能会以一定的延迟触发。但是,无论延迟如何,翻转算法都是正确的,因为在某个时间段内生成的所有日志记录事件都将输出到分隔该时间段的正确文件中。

    短版:不是时间触发的,而是日志事件触发的。没有记录事件意味着没有翻转。在设置为每分钟翻转的配置中,这意味着在任何一分钟内都没有没有日志事件到达的文件。

    【讨论】:

    • 内容丰富。谢谢你。有没有办法/配置让它时间触发而不是日志事件触发?
    • 据我所知,没有办法配置 logback 来创建空日志文件(这就是会发生的情况)。滚动总是发生在截止时间/大小之后的下一个记录事件上。调度程序可能会在每分钟开始时发送一个虚拟日志事件以强制创建一个没有真正日志事件的新日志文件,但我不希望在我的一个应用程序中出现这种行为。为什么你想要空的日志文件?如果几分钟内没有日志记录事件,我也不会期望那个时间的日志文件。
    • 不,我也不想要空的日志文件。我所追求的行为是在午夜创建当天的日志文件,而不是在新的日志文件到达时。
    • 在 logback 中,只有让事件恰好在午夜到达才有可能。如果它非常重要,您可以尝试虚拟事件方法。
    【解决方案2】:

    您不需要输入 属性。

    如果你省略了,你可以解决你的问题

    注意 RollingFileAppender 中的 file 属性( TimeBasedRollingPolicy) 可以设置或省略。通过设置 包含 FileAppender 的 file 属性,可以解耦 活动日志文件的位置和归档日志的位置 文件。当前日志将始终针对指定的文件 通过文件属性。随之而来的是当前活动的名称 日志文件不会随时间改变。但是,如果您选择省略 文件属性,那么活动文件将为每个重新计算 基于 fileNamePattern 值的周期。下面的例子 应该澄清这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多