不要域名能建网站么,wordpress y郁思注意,公文写作网站,三只松鼠网络营销方案策划书前言 
在将 Spring Boot 项目升级至 3.3.4 版本后#xff0c;遇到 Logback 配置的兼容性问题。本文将详细描述该问题的错误信息、原因分析#xff0c;并提供调整日志回滚策略的解决方案。 
错误描述 
这是SpringBoot 3.3.3版本之前的回滚策略的配置 !-- 日志记录器的滚动…前言 
在将 Spring Boot 项目升级至 3.3.4 版本后遇到 Logback 配置的兼容性问题。本文将详细描述该问题的错误信息、原因分析并提供调整日志回滚策略的解决方案。 
错误描述 
这是SpringBoot 3.3.3版本之前的回滚策略的配置 !-- 日志记录器的滚动策略按日期按大小记录 --rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${LOG_HOME}/%d{yyyy-MM-dd}.%i.log/fileNamePatterntimeBasedFileNamingAndTriggeringPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedFNATPmaxFileSize10MB/maxFileSize/timeBasedFileNamingAndTriggeringPolicy!--日志文档保留天数--maxHistory30/maxHistory/rollingPolicy当 升级至 Spring Boot 3.3.4 版本后启动时出现以下报错 
Exception in thread main java.lang.IllegalStateException: java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.model.processor.ImplicitModelHandler - Could not create component [timeBasedFileNamingAndTriggeringPolicy] of type [ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP] java.lang.ClassNotFoundException: ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP
ERROR in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Filename pattern [/logs/app/%d{yyyy-MM-dd}.%i.log] contains an integer token converter, i.e. %i, INCOMPATIBLE with this configuration. Remove it.主要问题出现在 logback 日志配置的 SizeAndTimeBasedFNATP 类以及日志文件命名中的 %i 令牌使用上。 
关键错误信息 
java.lang.ClassNotFoundException: ch.qos.logback.core.rolling.SizeAndTimeBasedFNATPFilename pattern contains an integer token converter, i.e. %i, INCOMPATIBLE with this configuration 
原因分析 
在升级 Spring Boot 版本至 3.3.4 后底层的 Logback 版本也随之更新。在较新的 Logback 版本中以下变化引发了兼容性问题 SizeAndTimeBasedFNATP 类弃用 在新的 Logback 版本中SizeAndTimeBasedFNATP 类已经被移除或不再使用。之前用来支持基于大小和时间的日志滚动的策略必须替换为新的策略类。此类需要被 SizeAndTimeBasedRollingPolicy 替代它能够同时支持按文件大小和时间进行日志滚动。  日志文件命名中的 %i 令牌不兼容 日志文件命名模式中使用的 %i 令牌用于在日志滚动时生成多个文件如 log.1, log.2 等但这与 TimeBasedRollingPolicy 不兼容。TimeBasedRollingPolicy 仅基于时间滚动日志不支持 %i 分片。  
解决方案 
调整日志回滚策略 
为了解决以上问题我们需要将原有的 TimeBasedRollingPolicy 替换为新的 SizeAndTimeBasedRollingPolicy并调整日志文件的命名模式以去除不兼容的 %i 令牌。 
配置修改 
以下是修改后的 logback-spring.xml 配置 
?xml version1.0 encodingUTF-8?
configuration!-- SpringBoot默认logback的配置 --include resourceorg/springframework/boot/logging/logback/defaults.xml/springProperty scopecontext nameAPP_NAME sourcespring.application.name/property nameLOG_HOME value/logs/${APP_NAME}/!-- 1. 输出到控制台 --appender nameCONSOLE classch.qos.logback.core.ConsoleAppenderfilter classch.qos.logback.classic.filter.ThresholdFilterlevelDEBUG/level/filterencoderPattern${CONSOLE_LOG_PATTERN}/PatterncharsetUTF-8/charset/encoder/appender!-- 2. 输出到文件 --appender nameFILE classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_HOME}/log.log/fileencoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} -%5level ---[%15.15thread] %-40.40logger{39} : %msg%n%n/patterncharsetUTF-8/charset/encoder!-- 使用SizeAndTimeBasedRollingPolicy替代旧的策略 --rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy!-- 滚动后的日志文件命名模式 --fileNamePattern${LOG_HOME}/%d{yyyy-MM-dd}-%i.log/fileNamePattern!-- 日志文件的最大大小 --maxFileSize10MB/maxFileSize!-- 最大保留30天的日志 --maxHistory30/maxHistory!-- 总日志文件大小不超过3GB --totalSizeCap3GB/totalSizeCap/rollingPolicyfilter classch.qos.logback.classic.filter.ThresholdFilterlevelINFO/level/filter/appender!-- 开发环境输出至控制台 --springProfile namedevroot levelINFOappender-ref refCONSOLE//root/springProfile!-- 生产环境输出至文件 --springProfile nameprodroot levelINFOappender-ref refCONSOLE/appender-ref refFILE//root/springProfile/configuration修改内容说明 使用 SizeAndTimeBasedRollingPolicy 该策略同时支持按时间和文件大小滚动日志。与旧的 TimeBasedRollingPolicy 类相比它是更推荐的滚动策略。  文件命名模式调整 在 fileNamePattern 中使用 %d{yyyy-MM-dd}-%i.log 作为文件名格式这允许日志按照日期命名并在同一天滚动日志时通过 %i 生成分片文件如 2024-10-01-1.log, 2024-10-01-2.log 等。  限制日志大小和保留时间 maxFileSize 设置为 10MB表示单个日志文件的最大大小。maxHistory 设置为 30表示最多保留30天的日志文件。totalSizeCap 设置为 3GB表示日志总大小不能超过 3GB。达到该限制时将删除最早的日志文件。  
总结 
在 Spring Boot 升级至 3.3.4 后由于底层 Logback 版本的更新原先使用的 TimeBasedRollingPolicy 类和日志文件名中的 %i 令牌会引发兼容性问题。通过调整日志回滚策略使用新的 SizeAndTimeBasedRollingPolicy 并去除不兼容的文件命名模式可以顺利解决这些问题使日志系统恢复正常运行。