首页 > 编程知识 正文

logback和slf4j关系,log4j2自动删除日志

时间:2023-05-04 00:18:30 阅读:138665 作者:4295

首先,logback应该是当前最主流的日志框架,但在实际使用中,打印的日志文件无法自动删除,日志文件经常会占用大量磁盘空间。

本文主要介绍logback日志文件自动删除的实现机制。

一.官方文件介绍官方文件地址: logback

1、console appender http://www.Sina.com /

如果要在控制台上打印日志,则必须设置添加控制台日志。

configurationappendername=' stdout ' class=' ch.QoS.logback.core.console appender '! - encodersareassignedthetypech.QoS.logback.classic.encoder.patternlayoutencoderbydefault-- encoder pattern %-4 RR oor encoder/appenderrootlevel=' debug ' appender-refref=' stdout '/() stdout ) ) ) msg ) msg ) msg

如果要打印生成的日志文件,并根据日志大小和时间自动滚动以生成新的日志文件,则必须配置RollingFileAppender添加滚动日志。 滚动策略选择SizeAndTimeBasedRollingPolicy根据日志大小和时间滚动。

以下配置将每个文件限制为100mb,保留30天的历史记录,日志总大小最大为20gb :

configurationappendername=' file ' class=' ch.QoS.logback.core.rolling.rolling file appender ' file $ { log _ file } -日志大小--- max filesize 100 MB/max filesize! -日志保留期----maxhistory 30/maxhistotalsizecap 20gb/totalsizecapcleanhistoryonstarttrue/cleanhistoryonstart/rollingpolicyencoderpattern % d { yyyy-mm-ddhh : mm : ss.SSS } %-4 relative [ % thread ] %-5 level % logger { 35 }

文件生成的日志名称rollingPolicy滚动策略。 此处使用的SizeAndTimeBasedRollingPolicy基于日志文件的大小和时间滚动。 fileNamePattern定义了将日志文件翻转(归档)到的名称。

该值必须包括文件的名称和正确放置的% d转换说明符。 % d转换说明符可能包含日期和时间模式。 如果省略了日期和时间模式,则假设使用缺省模式yyyy-MM-dd。 翻转周期根据fileNamePattern的值推定。 此处的滚动循环必须与maxHistory一起使用。 maxFileSize单个日志文件的最大大小。 达到最大大小后,将触发日志滚动操作,并生成新的一天

志文件maxHistory 要保存的归档文件的最大数量,以异步方式删除旧文件。例如,如果通过fileNamePattern中的%d{yyyy-MM}指定滚动周期为月度滚动,并将 maxHistory 设置为6,那么存档文件中超过6个月的文件将被删除。totalSizeCap 控制所有归档日志文件的总大小。当超出总大小上限时,将异步删除最早的归档日志文件。设置totalSizeCap 属性还要求设置 maxHistory 属性。优先“最大历史”限制,其次是“总大小上限”的限制。
按照实际业务情况配置 totalSizeCap ,可以有效避免占用过大的磁盘空间。
比如你希望 maxHistory 保留7天日志文件,但是可能这7个文件总大小超出磁盘容量,所以可以通过 totalSizeCap 来控制总大小,这样系统会判断大于此值时进行自动覆盖。
注意⚠️:单独配置totalSizeCap是没有意义的,一定要同时配置maxHistory属性,且大于0,才能实现超过总大小上限异步删除。cleanHistoryOnStart 是否在应用启动的时候删除历史日志。
如果设置为真,将在启动应用程序时执行档案删除。默认情况下,此属性设置为 false。归档日志移除通常在滚动期间执行。但是,有些应用程序的存活时间可能不够长,无法触发滚动。因此,对于如此短命的应用程序,删除存档可能永远没有机会执行。通过将 cleanHistoryOnStart 设置为 true,将在启动 appender 时执行档案删除。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控制是否在项目启动的时候检查是否需要删除归档日志。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。