logback-core 1.4.1适配Spring Boot 2.6.6-2.7.4时触发ClassNotFoundException
问题分析与解决方案
核心结论
是的,ch.qos.logback.core.joran.action.AbstractEventEvaluatorAction的引用几乎肯定来自你的Logback配置文件或外部依赖的配置资源,和Spring Boot本身无关。
原因说明
Logback从1.3.x版本开始就移除了AbstractEventEvaluatorAction这个类——它原本是用于解析Logback配置中<eventEvaluator>标签的旧实现,新版已用更简洁的配置语法和新类替代。当你升级到1.4.1时,旧配置里的相关引用找不到对应类,就会抛出ClassNotFoundException。
可能的引用来源
- 本地Logback配置文件:检查项目中的
logback-spring.xml、logback.xml,看是否存在:- 直接引用
ch.qos.logback.core.joran.action.AbstractEventEvaluatorAction全类名的配置 - 使用了旧版的
<eventEvaluator>标签且指定了该action - 自定义的Joran Action继承了这个抽象类
- 直接引用
- 外部依赖的配置:部分第三方Jar包可能自带了旧版Logback配置文件,被Spring Boot的日志自动加载机制读取,其中包含该类的引用
- 配置继承/引入:如果你的Logback配置通过
<include>标签引入了外部配置(比如公司通用日志配置、开源组件的默认配置),引入的文件中可能存在相关旧引用
解决步骤
- 修正本地配置:
将旧的<eventEvaluator>配置替换为Logback 1.4.x的标准写法,比如:<!-- 旧写法(依赖AbstractEventEvaluatorAction) --> <eventEvaluator name="myEvaluator" class="ch.qos.logback.classic.evaluation.JaninoEventEvaluator"> <action class="ch.qos.logback.core.joran.action.AbstractEventEvaluatorAction"/> <expression>...</expression> </eventEvaluator> <!-- 新写法(无需指定action) --> <evaluator name="myEvaluator" class="ch.qos.logback.classic.evaluation.JaninoEventEvaluator"> <expression>...</expression> </evaluator> - 排查依赖树:
- Maven项目执行
mvn dependency:tree,Gradle项目执行./gradlew dependencies,找出包含旧版Logback配置的第三方依赖,要么排除该依赖的配置文件,要么联系依赖方更新配置
- Maven项目执行
- 检查引入的外部配置:
如果用了<include>引入外部配置,确认引入的文件是否使用了旧版Logback语法,替换为新版兼容写法
原报错信息
at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at org.springframework.boot.logging.logback.LogbackLoggingSystem.configureByResourceUrl(LogbackLoggingSystem.java:186) at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:165) at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithSpecificConfig(AbstractLoggingSystem.java:66) ... Caused by: java.lang.ClassNotFoundException: ch.qos.logback.core.joran.action.AbstractEventEvaluatorAction at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
内容的提问来源于stack exchange,提问作者user656449
相关产品推荐
相关产品推荐

