项目使用logback记录日志,版本为1.1.11,配置了日志自动删除逻辑(应用启动就删除过往日志),但是往期日志文件始终没有被删除,越积越多,logback配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><property name="LOG_HOME" value="/home/iic/safety/logs/"/><!-- 日志文件根目录路径 --><!-- 开发环境 --><springProfile name="dev"><appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><appender name="DEBUG_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件输出的文件名 --><FileNamePattern>${LOG_HOME}/debug/iic_log.%d{yyyy-MM-dd_HH}.log</FileNamePattern>
<!-- 日志文件保留个数 --><maxHistory>2</maxHistory><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><appender name="ERROR_FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件输出的文件名 --><FileNamePattern>${LOG_HOME}/error/iic_log.%d{yyyy-MM-dd_HH}.log</FileNamePattern>
<!-- 日志文件保留个数 --><maxHistory>2</maxHistory><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender><appender name ="ASYNC_CONSOLE" class= "ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold >0</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>512</queueSize><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref ="consoleAppender"/></appender><appender name ="ASYNC_DEBUG" class= "ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold >0</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>512</queueSize><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref ="DEBUG_FILE"/></appender><appender name ="ASYNC_ERROR" class= "ch.qos.logback.classic.AsyncAppender"><!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 --><discardingThreshold >0</discardingThreshold><!-- 更改默认的队列的深度,该值会影响性能.默认值为256 --><queueSize>512</queueSize><!-- 添加附加的appender,最多只能添加一个 --><appender-ref ref ="ERROR_FILE"/></appender><root level="DEBUG"><appender-ref ref="ASYNC_CONSOLE" /><appender-ref ref="ASYNC_DEBUG" /><appender-ref ref="ASYNC_ERROR" /></root></springProfile>
</configuration>

最终通过对源码进行debug找出了问题所在,具体原因是logback的类ch.qos.logback.core.rolling.helper.RollingCalendar的periodBarriersCrossed方法long转换成int发生溢出,导致最高位变为1,成为了负数。

查看logback github仓库发现最新版本已修复此bug,使用如下logback版本即可修复此bug。

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.3.0-alpha5</version>
</dependency>

笔者所在项目由于各种原因只能使用当前的1.1.11版本,由于项目基于maven构建,最终决定使用java修改字节码技术在项目中修复此bug,详细过程见下篇 java修改字节码技术:https://blog.csdn.net/qq_41633199/article/details/117160642

logback1.1.11日志无法自动删除相关推荐

  1. logback过期日志文件自动删除配置

    logback过期日志文件自动删除配置 前言 logback应该是目前最主流的日志框架,在实际使用中经常遇到打印的日志文件不会自动删除,导致日志文件占有大量磁盘空间的问题. 本文主要介绍logback ...

  2. java 日志过期删除吗,log4j2 自动删除过期日志文件的配置及实现原理

    日志文件自动删除功能必不可少,当然你可以让运维去做这事,只是这不地道.而日志组件是一个必备组件,让其多做一件删除的工作,无可厚非.本文就来探讨下 log4j 的日志文件自动删除实现吧. 0.自动删除配 ...

  3. 对mysql日志进行操作的总结包括 启用,过期自动删除 等

    近段时间一直在研究mysql的日志系统,在网上看了N多mysql日志操作的文章,但都过于零乱,为了让自己以后不再搞忘,特作出以下总结: 1. 以前我错误的认为mysql的日志可以恢复到任何时间的状态, ...

  4. mysql 删除过期日志_【转】对mysql日志进行操作的总结包括 启用,过期自动删除 等...

    近段时间一直在研究mysql的日志系统,在网上看了N多mysql日志操作的文章,但都过于零乱,为了让自己以后不再搞忘,特作出以下总结: 1. 以前我错误的认为mysql的日志可以恢复到任何时间的状态, ...

  5. centos 定时删除文件_CentOS自动删除n天前日志命令

    CentOS自动删除n天前日志命令linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情. ...

  6. IIS日志自动删除程序 收藏

    很多使用Windows IIS的站长可能都会遇到这个问题,就是服务器的IIS日志增长经常会导致磁盘空间被占满,而IIS也没有自动删除日志的功能,因此需要经常关注即时清理日志,因此我这里就介绍一个能够自 ...

  7. linux自动删除30天前的日志文件

    linux应用总结: 自动删除n天前的日志文件: 1. 使用的命令格式如下:find 对应目录 -mtime +天数 -name "文件名" -exec -rm -rffind / ...

  8. Linux应用总结:自动删除n天前日志

    Linux应用总结:自动删除n天前日志 linux是一个很能自动产生文件的系统,日志.邮件.备份等,日记月累日志会堆积的越来越多,个人觉得让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天 ...

  9. ElasticSearch设置日志保存时间-自动删除

    ElasticSearch提供索引生命周期管理(6.6版本开始),参考地址: https://www.elastic.co/guide/en/elasticsearch/reference/6.6/_ ...

最新文章

  1. 【js】内置对象array的常见方法的使用
  2. Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解
  3. 深度聚焦 3 大技术领域,阿里云将重磅亮相首届线上 KubeCon
  4. 手机百度首页的localStorage的使用实例
  5. java 入门 博客园_javaweb入门
  6. Arduino笔记-解决上传时出现avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00问题
  7. TIOBE 6月编程语言排行榜:Python势不可挡
  8. 网站高并发优化性能调优总结
  9. Javascript 日期校验完备全过程
  10. 契税申报期限_纳税申报的5个小常识,会计不知道,真不适合干会计
  11. 省钱兄淘宝客APP源码商城抖客电商源码uniapp前端模版源码
  12. SecureCRT下载和破解
  13. Node.js 实现远程桌面监控
  14. android 外接扫码枪_Android 扫码枪以及焦点的处理
  15. WOS/EI/SCOPUS 三大文献检索数据库区别你了解吗?
  16. 妈妈吼你屋子乱的像猪窝的无聊探究
  17. android+拨打电话弹出无法连接到移动网络,呼叫转移设置网络异常怎么办
  18. 记录一次jar文件在windows系统下开机自启
  19. OMIM使用简要说明
  20. 2021/05/05 OJ每日一题 2132: Tmk吃汤饭 python

热门文章

  1. 基于.net平台remoting、DB2技术的大型分布式HIS系统架构及开发(项目架构师方向)...
  2. C语言18个经典问题答录
  3. SEAM学习(一)-----安装运行example
  4. 用matlab定义2020年元旦是星期三,如何用matlab实现某年某月某日是星期几的问题,...
  5. 预处理_气体在线分析仪预处理系统的工作内容
  6. linux大容量硬盘 克隆到小硬盘_Linux添加新硬盘的挂载方法
  7. 用python的五种方式_Python模块重载的五种方法
  8. ios弧形进度条_ios 圆形进度条
  9. php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)
  10. php文件名函数,php 获取文件名basename()函数的用法总结