【问题标题】:The old log files didn't get removed when using logback RollingFileAppender使用 logback RollingFileAppender 时旧的日志文件没有被删除
【发布时间】:2019-02-13 22:28:49
【问题描述】:

我的 logback.xml 文件如下,我设置 MaxHistory=1 是为了删除旧的日志文件,只保留一天的日志。但我发现旧文件没有被删除。我仍然可以将它们视为:app.log.2019-02-11 app.log.2019-02-12

<configuration>
    <property name="APP_NAME" value="logbacktest-logs" />
    <property name="LOG_HOME" value="/tmp/${APP_NAME}" />
    <property name="ENCODER_PATTERN" value="%d %C.%method:%L _ %msg%n"/>
    <contextName>${APP_NAME}</contextName>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${ENCODER_PATTERN}</pattern>
        </encoder>
    </appender> 
    <appender name="APP_APPEND" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/app.log.%d{yyyy-MM-dd}</fileNamePattern>
            <MaxHistory>1</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${ENCODER_PATTERN}</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="APP_APPEND" />
    </root>

</configuration>

【问题讨论】:

    标签: log4j logback


    【解决方案1】:

    这是我的日志的一部分

    12:11:32,358 |-c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy 中的信息 - 午夜翻转。

    这意味着你的应用程序在那段时间没有启动,那么它就没有机会删除它

    当我将 maxHistory 设置为 5 时,我遇到了同样的问题,它有时会删除 5 个日志文件,但是当我的应用程序死亡时,它无法删除日志,因为它没有机会删除。


    参考 logback 文档,它说你可以使用这个:

    <cleanHistoryOnStart> true </cleanHistoryOnStart>   
    

    如果设置为 true,归档删除将在 appender 启动时执行。默认情况下,此属性设置为 false。

    存档删除通常在翻转期间执行。但是,某些应用程序的生存时间可能不足以触发翻转。因此,对于此类短暂的应用程序,归档删除可能永远不会有机会执行。通过将 cleanHistoryOnStart 设置为 true,在 appender 启动时执行归档删除。


    将你的 logback-spring.xml 修改为:

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/app.log.%d{yyyy-MM-dd}</fileNamePattern>
            <maxHistory>1</maxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
        </rollingPolicy>
    

    【讨论】:

    • 不幸的是,它不会删除与当前专利不匹配的日志。例如,如果您模式 ${LOG_HOME}/app.log.%d{yyyy-MM-dd} 并且当前时间是 app.log.2021-12-12 它不会删除像 app.log.2021-10-12 这样的文件,因为它是另一个月。如果您在停止应用程序的同一个月内重新启动应用程序,这没有问题。但是,如果您基于 every minute 之类的 app.log.%d{yyyy-MM-dd-HH-mm} 历史记录,则无法删除旧文件
    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2021-11-18
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多