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

时间:2017-08-02 19:22:26

标签: java logging logback

我正在尝试为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就压缩日志文件。

上面显示的回溯配置只保留最后7个文件,因此如果有很多日志,例如,我只能在最后一天拥有7个文件。

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

2 个答案:

答案 0 :(得分:5)

  

我在这里要做的是保留过去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文件中的实际日志存档,并指定文件名模式并清除当前日志文件)。

此外,当您指定<maxHistory>7</maxHistory>时,它将仅存档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

中检索所有这些信息

答案 1 :(得分:2)

<maxHistory>168</maxHistory>在这种情况下可以使用(24 * 7)