logback1.1.11日志无法自动删除

             项目使用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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值