日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

logback1.1.11日志无法自动删除

發布時間:2024/10/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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日志无法自动删除的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。