当前位置:网站首页>日志定期压缩、清除
日志定期压缩、清除
2022-08-09 15:43:00 【xixingzhe2】
1、背景
- 定位问题:打印日志的一个目的是为了快速定位线上问题,日志打印的越详细,问题原因就越容易定位。
- 磁盘空间有限:随着业务量提升,磁盘空间满了,日志将无法打印了。
为了平衡上面两个条件,我们可以压缩文件和保留一定时间(如7天)的历史文件。
2、日志压缩
我们使用的日志框架是logback,下面的配置也是以logback.xml为例
2.1 保留日志
2.1.1 配置
<!-- error日志输出-保留7天 -->
<appender name="ErrorFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<File>${LOG_HOME:-c:/}logs/error/error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 基于时间和大小的轮转策略中fileNamePattern位置很重要,他决定了生成文件的名称及轮转时机,以及是否压缩 -->
<!-- %d决定以什么时间维度轮转(但实际轮转时机取决于日志事件的到达时间),比如%d{yyyy/MM}:每个月开始的时候轮转,%d默认为 yyyy-MM-dd:按天轮转 -->
<!-- %i为文件按照maxFileSize大小规定轮转后的序号 -->
<FileNamePattern>${LOG_HOME:-c:/}logs/error/error-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>7</MaxHistory>
<!--每个文件最多100MB,保留7天的历史记录,但最多20GB-->
<TotalSizeCap>20GB</TotalSizeCap>
<!--重启清理日志文件-->
<CleanHistoryOnStart>true</CleanHistoryOnStart>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--每个文件最多100MB-->
<MaxFileSize>100MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--日志文件输出格式-->
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</layout>
<!-- 只打印错误日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 所有日志输出-保留7天 -->
<appender name="AllFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME:-c:/}logs/all/all.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME:-c:/}logs/all/all-%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<MaxHistory>7</MaxHistory>
<TotalSizeCap>20GB</TotalSizeCap>
<CleanHistoryOnStart>true</CleanHistoryOnStart>
<TimeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>100MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</layout>
</appender>2.1.2 cleanHistoryOnStart
如果设置为true,则将在追加程序启动时执行归档删除。默认情况下,此属性设置为false。
通常在过渡期间执行归档删除。但是,某些应用程序的生存时间可能不足以触发翻转。因此,对于这种短暂的应用程序,归档删除可能永远不会有执行的机会。通过将cleanHistoryOnStart设置为true,将在附加程序启动时执行归档删除。

2.2 压缩日志
fileNamePattern:后缀以".zip"或".gz"结尾,则开启日志文件压缩。
<!-- 压缩日志输出 start -->
<!-- 所有日志输出 -->
<appender name="GzAllFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME:-c:/}logs/gz/all/all.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 后缀以".zip"或".gz"结尾,则开启日志文件压缩 -->
<FileNamePattern>${LOG_HOME:-c:/}logs/gz/all/all-%d{yyyy-MM-dd}.%i.log.gz</FileNamePattern>
<MaxHistory>3600</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>100MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n
</pattern>
</layout>
</appender>
<!-- error日志输出 -->
<appender name="GzErrorFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME:-c:/}logs/gz/error/error.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME:-c:/}logs/gz/error/error-%d{yyyy-MM-dd}.%i.log.gz
</FileNamePattern>
<MaxHistory>3600</MaxHistory>
<TimeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<MaxFileSize>100MB</MaxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n
</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印错误日志 -->
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 压缩日志输出 end -->3、示例代码
边栏推荐
猜你喜欢

网络——局域网和广域网

3种特征分箱方法!

Heap series_0x0A: 3 methods to solve the heap overflow problem at once

uni-app中websocket的使用 断开重连、心跳机制

开始记录自己的学习过程和目标

【服务器数据恢复】SAN LUN映射出错导致文件系统数据丢失的数据恢复案例

uniapp 项目搭建

网络——IPV4地址(三)

【挨踢(IT)初体验】
![[Server data recovery] Data recovery case of file system data loss caused by SAN LUN mapping error](/img/fa/a6d9fdc17dd92f68f876df4a6e3ca6.jpg)
[Server data recovery] Data recovery case of file system data loss caused by SAN LUN mapping error
随机推荐
网络——介质访问控制
网络——IPv6(一)
国星光电吉利产业园项目主体结构全面封顶,将重点生产 RGB 小间距、Mini LED、TOP LED 等产品
苹果开发者账号 申请 D-U-N-S 编号
打印星型图「建议收藏」
想通这点,治好 AI 打工人的精神内耗
知识点滴 - 如何写项目总结
【Web渗透】信息收集篇——Google搜索引擎(一)
微信开发者工具报错,提示 未找到入口 app.json 文件
August 9, 2022: Build .NET apps in C# -- use the Visual Studio Code debugger to interactively debug .NET apps (won't, fail)
第一篇博客
开源星「001 号」落地 FlyFish,欢迎登陆赢神秘大礼包!
Access Characteristics of Constructor under Inheritance Relationship
六.数组越界问题引出对栈区内存的探索
SQL抖音面试题:送你一个万能模板,要吗?(重点、每个用户每月连续登录的最大天数)
Two ways to find the factorial of n
一个程序员的水平能差到什么程度?
PHP 补全日期区间中缺少的日期/返回缺少的日期
Became CTO, was killed by my boss in 6 months, I lost 10 million
shopee引流方式有哪些,商家如何为自己店铺做引流?