除非有新日志,否则不会滚动TimeBasedRollingPolicy

这是我的配置:

<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 pm上有一个日志,现在是11:55 pm,当它到达11:54 pm时,它不会立即为11:53 pm创建一个新的日志文件,但是当稍后有新日志出现时,请说11:56 pm,现在它将在11:53 pm创建文件。)

我是否缺少某些内容,我认为它将每分钟创建一个日志文件?

回答:

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

由于各种技术原因,翻转不是由时钟驱动的,而是取决于日志记录事件的到达。例如,在2002年3月8日,假设fileNamePattern设置为yyyy-

MM-dd(每日翻转),则午夜之后第一个事件的到来将触发翻转。如果在午夜后的23分47秒内没有记录事件,则实际上将在3月9日凌晨00:23‘47

AM而非0:00

AM发生翻转。因此,根据事件的到达率,可能会以一定的延迟触发翻转。但是,无论延迟如何,从某种意义上讲,已知过渡算法都是正确的,因为在特定时间段内生成的所有日志记录事件都将在界定该时间段的正确文件中输出。

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

以上是 除非有新日志,否则不会滚动TimeBasedRollingPolicy 的全部内容, 来源链接: utcz.com/qa/415878.html

回到顶部