【问题标题】:Logback Keep n Days Logs With Size Based ArchivingLogback 使用基于大小的归档保留 n 天日志
【发布时间】:2017-08-02 19:22:26
【问题描述】:

我正在尝试为 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>

我在这里想要实现的是保留过去 7 天的所有日志,但只要日志文件达到 500MB,就压缩它们。

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

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

【问题讨论】:

    标签: java logging logback


    【解决方案1】:

    我在这里想要实现的是保留过去 7 年的所有日志 天,

    您在此处指定一个模式,该模式将滚动策略考虑到小时粒度:

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

    fileNamePattern 不仅仅是一个文件名模式。
    它还指示翻转频率。

    强制的 fileNamePattern 属性定义了 翻转(存档)的日志文件。它的值应该由名称组成 文件的名称,加上适当放置的 %d 转换说明符。 %d 转换说明符可以包含指定的日期和时间模式 由 java.text.SimpleDateFormat 类。如果日期和时间模式 省略,则假定默认模式 yyyy-MM-dd该 根据 fileNamePattern 的值推断翻转周期。

    通过指定此日期模式:%d{yyyy-MM-dd HH},对于一年中的每一天,每次您在新的时间记录某些内容时,实际的日志都会被归档并为新的时间创建一个新的日志文件。

    例如:您在01/03/17 09:0001/03/17 09:59 之间记录的所有内容都记录在当前日志文件中。
    只要01/03/17 10:00(您将执行的第一个日志)将导致日志轮换(使用指定的文件名模式将实际日志归档到 gz 文件中并清除当前日志文件)。

    此外,当您指定 &lt;maxHistory&gt;7&lt;/maxHistory&gt; 时,它将仅存档 7 个不同的小时。
    因此,如果您的应用程序每小时记录一次,您将归档 7 小时的应用程序日志,而不是您希望的 7 天。

    如果您想拥有 7 天的日志历史记录,只需删除模式中的 HH

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

    但当日志文件达到 500MB 时压缩它们。

    当您在fileNamePattern 中指定压缩扩展名作为文件的后缀时,如 gz、zip 等...压缩是自动的:

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

    无论如何,Logback 不提供仅在遇到特定条件时压缩存档的方法。
    日志是否应该被压缩。

    当你声明这个属性时:

     <maxFileSize>500MB</maxFileSize>
    

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

    您可以在logback appenders documentation 中检索所有这些信息:

    【讨论】:

    • 我明白了。谢谢!我忘了我把它改成了每小时轮换一次。这个问题。它保留过去 7 小时的日志,而不是几天。
    • 不客气。文件名模式有点误导性,因为它不仅仅是文件名模式。
    • 嗨@davidxxx,我的情况与此略有不同。我想记录日志 14 天而不是每天,并将最大文件大小设置为 50MB。可以使用maxFileSize 标签设置最大文件大小...但我不确定如何配置日志以记录 14 天。我不确定我是否真的需要创建一个新线程或问题,因为我认为它有点类似于这个页面/线程问题。谢谢:)
    • 您好@Borgy Manotoy,需要明确的是,您是希望每 14 天滚动一次,还是希望在历史日志中保留不超过 14 天?
    • 我希望将日志保留不超过 14 天,并将最大大小设置为 50MB
    【解决方案2】:

    &lt;maxHistory&gt;168&lt;/maxHistory&gt; 在这种情况下可以工作(24*7)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 2021-12-30
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多