You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至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,添加:
    -verbose:class
    
    启动Tomcat后,在控制台搜索org.apache.logging.log4j.Logger,查看该类的加载路径是否为Web应用WEB-INF/lib下的正确J包。

内容的提问来源于stack exchange,提问作者BenjyTec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:42:41