迁移至Jakarta后Tomcat10.1运行时ClassNotFoundException求助
排查与解决Log4j类找不到的问题
核心问题定位
从报错java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger来看,本质是Web应用运行时类路径中缺少Log4j核心依赖包——编译通过仅说明编译类路径包含依赖,但部署到Tomcat时这些包未被正确打包到WEB-INF/lib目录下。
具体排查与修复步骤
1. 补全Log4j核心依赖
你当前仅添加了SLF4J桥接包,缺少Log4j 2.x的核心API与实现包。在Gradle的build.gradle中补充以下依赖:
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.23.1' implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.23.1'
注:log4j-slf4j2-impl是SLF4J到Log4j的桥接包,本身不包含Log4j核心类,必须搭配核心包使用。
2. 检查War包的依赖打包情况
- 找到项目War输出目录(通常为
build/libs或Eclipse自动生成的WebContent/WEB-INF/lib),打开War包或直接查看lib目录,确认log4j-api-2.23.1.jar、log4j-core-2.23.1.jar及相关SLF4J包是否存在。 - 如果缺失,检查
build.gradle的war配置是否有排除规则:war { // 排查是否有类似排除Log4j依赖的代码 exclude 'log4j-*.jar' }
3. 清理Tomcat全局类路径冲突
- 检查Tomcat安装目录下的
lib文件夹,若存在Log4j 1.x版本的包(包名格式为log4j-*.jar,1.x类路径为org.apache.log4j.Logger,与2.x的org.apache.logging.log4j.Logger不同),直接删除该包,避免与Web应用内的2.x包产生类加载冲突。
4. 修正log4j2.xml路径配置
你在context.xml中配置的../WEB-INF/log4j2.xml路径有误,Tomcat上下文路径的基准是Web应用根目录,正确配置应为:
<Context> <!-- ... --> <Parameter name="log4j2.configurationFile" value="/WEB-INF/log4j2.xml"/> </Context>
更简单的方式是将log4j2.xml放到src/main/resources目录下,Log4j会自动从类路径加载配置,无需额外配置路径。
5. 检查Eclipse部署配置
- 右键项目 →
Properties→Deployment Assembly,确认Gradle依赖已被添加到部署路径中。若未添加,点击Add→Java Build Path Entries,选择所有Log4j与SLF4J相关依赖并添加。 - 执行
Project→Clean,清理项目缓存后重新部署到Tomcat。
6. 调试类加载来源
在Tomcat启动参数中添加类加载调试参数,追踪Logger类的加载来源:
- 打开Eclipse的Tomcat服务器配置 →
Open Launch Configuration→VM arguments,添加:
启动Tomcat后,在控制台搜索-verbose:classorg.apache.logging.log4j.Logger,查看该类的加载路径是否为Web应用WEB-INF/lib下的正确J包。
内容的提问来源于stack exchange,提问作者BenjyTec
相关产品推荐
相关产品推荐

