logback1.1.11日志无法自动删除
生活随笔
收集整理的這篇文章主要介紹了
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
總結
以上是生活随笔為你收集整理的logback1.1.11日志无法自动删除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql InnoDB 聚集索引,二级
- 下一篇: jmeter生成优美的压力测试报告,jm