我正在尝试为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天的所有日志?任何帮助都非常感谢。
答案 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: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
但只要达到500MB就压缩日志文件。
在fileNamePattern
中,您将压缩扩展名指定为gz,zip等文件的后缀...压缩是自动的:
请注意,还通过此属性指定了文件压缩。对于 例如,fileNamePattern设置为MyLogFile%i.log.zip意味着 必须使用zip格式压缩存档文件; gz格式是 也支持。
无论如何,只有在遇到特定情况时,Logback才会提供压缩存档的方法
日志应该被压缩或者不应该被压缩。
声明此属性时:
<maxFileSize>500MB</maxFileSize>
您可以通过存档指定最大文件大小
如果您不需要在存档大小中设置限制,请不要指定它并保留默认值(10MB)。
答案 1 :(得分:2)
<maxHistory>168</maxHistory>
在这种情况下可以使用(24 * 7)