代码之家  ›  专栏  ›  技术社区  ›  Sergei Sirik

使用基于大小的归档保留n天日志

  •  9
  • Sergei Sirik  · 技术社区  · 8 年前

    我正在尝试为java web应用程序配置日志滚动策略。这是我到目前为止得到的

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_HOME}/appLog.%d{yyyy-MM-dd HH}.%i.log.gz
                </fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
                <maxHistory>7</maxHistory>
                <cleanHistoryOnStart>true</cleanHistoryOnStart>
            </rollingPolicy>
    

    上面显示的Logback配置只保留最后7个文件,因此,例如,如果有很多日志,我可以只保留最后一天的7个文件。

    在这种情况下,我如何配置logback以保留过去7天的所有日志?非常感谢您的帮助。

    2 回复  |  直到 8 年前
        1
  •  9
  •   davidxxx    8 年前

    我在这里试图实现的是保留过去7年的所有日志

     <fileNamePattern>${LOG_HOME}/appLog.%d{yyyy-MM-dd HH}.%i.log.gz
    

    这个 fileNamePattern 不仅仅是文件名模式。

    强制性 属性定义 滚动(存档)日志文件。其值应由名称组成 %d 转换说明符。%d 转换说明符可以包含指定的日期和时间模式 由 班如果日期和时间模式 每天 假设为。 这个

    通过指定此日期模式: %d{yyyy-MM-dd HH}

    例如:您在 01/03/17 09:00 01/03/17 09:59 记录在当前日志文件中。
    一旦 01/03/17 10:00 ,您将执行的第一个日志将导致日志旋转(将实际日志归档到具有指定文件名模式的gz文件中,并清除当前日志文件)。

    <maxHistory>7</maxHistory> ,它将只存档7个小时。
    因此,如果您的应用程序每小时都会记录一些日志,那么您将归档7个小时的应用程序日志,而不是您希望的7天。

    如果希望日志记录持续7天,只需删除 HH 在模式中:

     <fileNamePattern>${LOG_HOME}/appLog.%d{yyyy-MM-dd}.%i.log.gz
    

    当处于 文件名模式

    请注意,文件压缩也是通过此属性指定的。对于 例如,fileNamePattern设置为MyLogFile%i.log。zip的意思是 存档文件必须使用zip格式进行压缩;gz格式为 也支持。


    日志应压缩或不压缩。

     <maxFileSize>500MB</maxFileSize>
    

    您可以按存档指定最大文件大小。
    如果不需要设置存档大小的限制,请不要指定它,并保留默认值(10MB)。

    logback appenders documentation :

        2
  •  5
  •   lucifer    7 年前

    <maxHistory>168</maxHistory> 在这种情况下有效(24*7)