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

标签 java logging logback rollingfileappender

这是我的配置:

<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 点 53 分时,它不会立即为晚上 11 点 53 分创建一个新的日志文件,但是当一个新日志稍后出现时,说在晚上 11:56,它现在为晚上 11:53 创建文件。)

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

最佳答案

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

For various technical reasons, rollovers are not clock-driven but depend on the arrival of logging events. For example, on 8th of March 2002, assuming the fileNamePattern is set to yyyy-MM-dd (daily rollover), the arrival of the first event after midnight will trigger a rollover. If there are no logging events during, say 23 minutes and 47 seconds after midnight, then rollover will actually occur at 00:23'47 AM on March 9th and not at 0:00 AM. Thus, depending on the arrival rate of events, rollovers might be triggered with some latency. However, regardless of the delay, the rollover algorithm is known to be correct, in the sense that all logging events generated during a certain period will be output in the correct file delimiting that period.

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

关于java - 除非有新日志,否则 TimeBasedRollingPolicy 不会滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188936/

相关文章:

java - 使用 printStackTrace 包含外部库的日志

java - Spring with Castor - 初始化应用程序上下文时出现空指针异常

javascript - console.log 在 Liferay 的 Firebug 中什么都不做

java - 如何在 Spring RestTemplate 中记录响应?

java - 多个 RollingFileAppenders 写入同一个文件

emacs - 限制 ENSIME 服务器缓冲区的长度;该缓冲区的钩子(Hook)

java - 如何以编程方式检查应用程序是否在 Debug模式下运行?

java: 类加载?

java - 处理复杂条件评估的设计模式

asp.net - 如何在 Log4Net 目录中指定日期?