• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

坑爹的日志无法按天切割问题!

技术杂谈 勤劳的小蚂蚁 3个月前 (01-18) 83次浏览 已收录 0个评论 扫描二维码

问题背景

线上某个新管理型系统出现了日志无法按天切割生成日志文件的问题,所有的日志都在一个日志文件里面,只有每次重启的时候才会重新生成文件。
这个管理系统使用的是 Spring Boot + Logback 框架,查看了 Logback 的日志文件,发现了策略组合使用问题。
以下是有问题的日志配置代码。
  1. <appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">
  2.    <filterclass="ch.qos.logback.classic.filter.ThresholdFilter">
  3.        <level>INFO</level>
  4.    </filter>
  5.    <rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  6.        <FileNamePattern>${LOG_PATH}/info.log.%d{yyyy-MM-dd}.log</FileNamePattern>
  7.        <MaxHistory>30</MaxHistory>
  8.    </rollingPolicy>
  9.    <encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  10.        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  11.    </encoder>
  12.    <triggeringPolicyclass="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  13.        <MaxFileSize>10MB</MaxFileSize>
  14.    </triggeringPolicy>
  15. </appender>
该配置使用了基于时间的滚动切割策略 TimeBasedRollingPolicy,每天0点自动生成一份新的日志文件。
但里面包含了一段 triggeringPolicy 触发策略,即最大单个文件超过 10MB 自动新成新日志文件, TimeBasedRollingPolicy 是基于时间的,不能和其他策略一起组合使用。

解决办法

1、去掉组合策略 triggeringPolicy
  1. <appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">
  2.    <filterclass="ch.qos.logback.classic.filter.ThresholdFilter">
  3.        <level>INFO</level>
  4.    </filter>
  5.    <rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  6.        <FileNamePattern>${LOG_PATH}/info.log.%d{yyyy-MM-dd}.log</FileNamePattern>
  7.        <MaxHistory>30</MaxHistory>
  8.    </rollingPolicy>
  9.    <encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  10.        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  11.    </encoder>
  12. </appender>
2、使用时间和大小组合策略 SizeAndTimeBasedRollingPolicy
  1. <appendername="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender">
  2.    <filterclass="ch.qos.logback.classic.filter.ThresholdFilter">
  3.        <level>INFO</level>
  4.    </filter>
  5.    <rollingPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  6.        <FileNamePattern>${LOG_PATH}/info.log.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
  7.        <MaxHistory>30</MaxHistory>
  8.        <maxFileSize>20MB</maxFileSize>
  9.    </rollingPolicy>
  10.    <encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  11.        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  12.    </encoder>
  13. </appender>
注意后面的 %i 是必须要加上去的,是单个日志文件超大小后的切割序号。
使用以上两种方案都可以解决 Logback 无法按天切割生成日志的问题,如果这两种解决不了你的问题,那你也要检查下你的滚动策略是否使用正确。


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:坑爹的日志无法按天切割问题!
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00