赞
踩
logback应该是目前最主流的日志框架了,在实际使用中经常遇到打印的日志文件不会自动删除,导致日志文件占有大量磁盘空间的问题。
本文主要介绍logback日志文件自动删除的实现机制。
官方文档地址:logback
说明:
如果希望日志打印到控制台,需要配置ConsoleAppender
控制台日志追加。
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
说明:
如果希望打印生成的日志文件根据日志大小和时间自动滚动生成新的日志文件,需要配置RollingFileAppender
滚动日志追加。滚动策略选择SizeAndTimeBasedRollingPolicy基于日志大小和时间滚动。
下面的配置是限制每个文件最多100mb,保存30天的历史记录,日志总大小最多20gb。
<configuration> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_FILE}</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <fileNamePattern>${LOG_FILE}-%d{yyyy-MM-dd}.%i.gz</fileNamePattern> <!--日志大小--> <maxFileSize>100MB</maxFileSize> <!--日志保留时长--> <maxHistory>30</maxHistory> <totalSizeCap>20GB</totalSizeCap> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> <charset>utf8</charset> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="FILE" /> </root> <configuration>
参数说明:
file
生成的日志名称rollingPolicy
滚动策略,这里采用的SizeAndTimeBasedRollingPolicy,基于日志文件大小和时间滚动。fileNamePattern
定义翻转(归档)日志文件的名称。maxFileSize
单个日志文件的最大体积,到达最大体积后就会触发日志滚动操作,生成新的日志文件maxHistory
要保存的归档文件的最大数量,以异步方式删除旧文件。例如,如果通过fileNamePattern中的%d{yyyy-MM}指定滚动周期为月度滚动,并将 maxHistory 设置为6,那么存档文件中超过6个月的文件将被删除。totalSizeCap
控制所有归档日志文件的总大小。当超出总大小上限时,将异步删除最早的归档日志文件。设置totalSizeCap 属性还要求设置 maxHistory 属性。优先“最大历史”限制,其次是“总大小上限”的限制。cleanHistoryOnStart
是否在应用启动的时候删除历史日志。encoder
控制输出日志的格式和编码。说明:为了测试效果,修改配置,
通过fileNamePattern属性中的%d{yyyy-MM-dd_HH-mm}指定滚动周期为分钟。
maxFileSize控制日志文件超过10kb就触发滚动。
maxHistory属性结合fileNamePattern中解析出现的滚动周期,实现最多保留近3分钟的归档日志。
totalSizeCap控制所有归档日志文件的总大小不超过20kb。
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_FILE}</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <fileNamePattern>${LOG_FILE}-%d{yyyy-MM-dd_HH-mm}.%i.gz</fileNamePattern> <!--日志大小--> <maxFileSize>10KB</maxFileSize> <!--日志保留时长--> <maxHistory>3</maxHistory> <totalSizeCap>20KB</totalSizeCap> <cleanHistoryOnStart>true</cleanHistoryOnStart> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> <charset>utf8</charset> </encoder> </appender>
测试一:
项目启动后,持续调用方法生成日志文件:
执行结果:
归档日志(带时间后缀的这些滚动生成的日志文件)总大小超过20kb后,就会触发删除操作。
说明totalSizeCap配置属性生效。
测试二:
间隔3分钟后,在调用方法生成日志。
执行结果:
3分钟前的日志文件全部被删除,说明fileNamePattern和maxHistory配置最多保留近3分钟的归档日志生效。
测试三:
生成一批归档日志文件后,3分钟后重启项目,校验是否在项目启动是清理日志。
这里为了验证结果的正确性,需要保证项目重启过程中生成的日志大小不超过maxFileSize,不触发日志滚动。
项目启动生成日志:刚好9kb,没有触发滚动。
调用方法,生成日志文件:
为避免触发滚动,删除log文件,3分钟后重启项目:
执行结果:
3分钟前的日志文件全部被删除,说明cleanHistoryOnStart配置生效,在项目启动的时候会检查是否有需要删除的归档日志文件。
本文主要介绍了logback过期的日志文件的自动删除机制如何配置。有如下参数需要注意:
1、RollingFileAppender
控制滚动日志文件追加。
2、SizeAndTimeBasedRollingPolicy
用来配置采用基于大小和时间的滚动策略。
3、fileNamePattern
既控制滚动日志的命名模式,也控制maxHistory的滚动周期。
4、maxFileSize
控制日志最大多少触发滚动。
5、maxHistory
控制归档日志的保留时长,需要和fileNamePattern中的%d{yyyy-MM-dd}解析的滚动周期一起使用。
6、totalSizeCap
控制归档日志的最大体积是多少,超过会触发删除归档日志操作。需要和maxHistory属性一起使用,只配置totalSizeCap属性但是maxHistory=0时不会触发自动删除操作。
7、cleanHistoryOnStart
控制是否在项目启动的时候检查是否需要删除归档日志。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。