除非有新的日志,否则基于时间的轮询策略不会滚动[英] TimeBasedRollingPolicy not rolling unless there are new logs

问题描述

这是我的配置:

<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 创建文件.)

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

推荐答案

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

<块引用>

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

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

本文地址:https://www.itbaoku.cn/post/978793.html