美文网首页
Slf4j日志优化,并解决几个问题

Slf4j日志优化,并解决几个问题

作者: 程就人生 | 来源:发表于2022-03-08 19:51 被阅读0次

    最近在维护线上项目的时候,发现了2个问题:
    1. 过期的日志没有被删除。
    2. 日志超过大小但没有重新生成,最终导致一个文件几个G,给维护人员带来很大的不便。配置呢,是按照这篇文章配置的:
    Springboot整合Slf4j输出日志到控制台、文件、Mysql数据库

    查看滚动策略 TimeBasedRollingPolicy 的源码,发现有几个参数没有配置:
    1.启动项目后清理历史日志,默认值为 false,所以必须配置;

    <cleanHistoryOnStart>true</cleanHistoryOnStart>
    

    2.日志文件总大小,默认不绑定,也就是不限制,也需要配置一下;

    <totalSizeCap>20GB</totalSizeCap>
    

    把这2个参数加上去之后,解决了第一个问题,但是并没有解决第二个问题,继续调查。

    无意中发现 SizeAndTimeBasedRollingPolicy 继承了 TimeBasedRollingPolicy ,SizeAndTimeBasedFNATP可以去掉了,调整部分:

    
    <!-- SizeAndTimeBasedRollingPolicy,它根据时间和大小来制定滚动策略,既负责滚动也负责出发滚动 -->
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">      
        <!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->  
        <!-- 文件名:log/sys.2017-12-05.0.log -->  
        <fileNamePattern>${LOG_HOME}/${LOG_NAME}.%d.%i.log</fileNamePattern>   
        <!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->   
        <maxHistory>30</maxHistory>
        <!-- 日志总大小 -->
        <totalSizeCap>20GB</totalSizeCap>   
        <!--启动项目后清理历史日志-->
        <cleanHistoryOnStart>true</cleanHistoryOnStart> 
        <!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 -->    
        <maxFileSize>100MB</maxFileSize>
    </rollingPolicy>
    

    调整过后,依旧没有解决第二个问题,根据网友的提示,有可能是日志文件打印频率太高,最终导致日志文件无法分割。

    这台服务器是收集数据的,客户机1000台,每台客户机下有100个数据点,每台客户机把100个数据点的数据以毫秒的速度发送给服务器......

    控制台唰唰地,只能看见数据闪过的痕迹...

    赶紧把那行打印日志最频繁的代码删了...

    第二天再次观测,日志可以成功地按照大小和日期进行重新生成了。

    最后总结
    这次日志优化,主要优化5个点:
    1. 日志文件由 Logback.xml 更改为 logback-spring.xml,无需在application.properties中引用。

    修改原因见此

    2. 配置参数的增加:

    <!--启动项目后清理历史日志-->
    <cleanHistoryOnStart>true</cleanHistoryOnStart>
    <!--日志文件总大小-->
    <totalSizeCap>20GB</totalSizeCap>
    

    3. 使用SizeAndTimeBasedRollingPolicy类替换TimeBasedRollingPolicy,并移除SizeAndTimeBasedFNATP类。

    4. 采用标准方式打印,不再使用字符串拼接打印;

    // 优化前:
    log.info("收集到的数据:" + data + "收集日期:" + new Date());
    // 优化后:
    log.info("收集到的数据:{},收集日期:{}",data,new Date());
    

    5. 去掉打印频繁且无意义的打印。

    参考官网文档:https://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy

    相关文章

      网友评论

          本文标题:Slf4j日志优化,并解决几个问题

          本文链接:https://www.haomeiwen.com/subject/dztarrtx.html