java TimeBasedRollingPolicy只有在有新日志时才会滚动

yfwxisqw  于 2023-03-06  发布在  Java
关注(0)|答案(2)|浏览(293)

下面是我的配置:

<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>

根据TimeBasedRollingPolicy中的回滚文档,文件将基于我的%d{yyyy-MM-dd_HH-mm}文件名模式每分钟滚动一次。
我观察了它是如何工作的,下面是我的发现:

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

我错过了什么,我以为它会创建一个日志文件每分钟?

svujldwt

svujldwt1#

在您链接的文档部分进一步向下滚动,您将找到以下内容:
由于各种技术原因,翻转不是时钟驱动的,而是取决于日志记录事件的到达。例如,在2002年3月8日,假设fileNamePattern设置为yyyy-MM-dd(每日滚动),则午夜后第一个事件的到达将触发滚动。如果在此期间(比如午夜后23分47秒)没有日志记录事件,则翻转实际上将发生在3月9日00:23 '47 AM,而不是0:00 AM。因此,根据事件的到达速率,翻转可能会在一定的延迟后触发。但是,无论延迟如何,翻转算法都是正确的,因为在特定时段内生成的所有日志记录事件都将输出到界定该时段的正确文件中。
简短版本:它不是时间触发的,而是日志事件触发的。没有日志事件意味着没有滚动。在设置为每分钟滚动的配置中,这意味着在没有日志事件到达的任何一分钟内都不会有文件。

lmvvr0a8

lmvvr0a82#

不需要输入属性。
如果忽略它,就可以解决问题
请注意,RollingFileAppender中的file属性(TimeBasedRollingPolicy的父级)。通过设置包含FileAppender的file属性,您可以将活动日志文件的位置与存档日志文件的位置分离。2当前日志将始终指向file属性指定的文件。因此,当前活动日志文件的名称不会随时间而更改。但是,如果选择忽略file属性,则将根据fileNamePattern的值为每个时段重新计算活动文件。下面的示例将阐明这一点。

相关问题