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

Tomcat 9.0.50移除log4j1.2-api桥接包启动报错咨询

问题解答

核心结论

不是Tomcat9只能搭配桥接包用Log4j2,而是你的项目里还有代码或依赖在调用Log4j 1.x的API(比如org.apache.log4j.Logger)。移除桥接包后,JVM找不到这些老API的类,自然就报错了。

报错原因分析

看报错栈里最关键的一行:

Caused by: java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger;

这说明Tomcat扫描Web应用时,发现某个类里声明了org.apache.log4j.Logger类型的字段,但这个类在当前类路径里找不到。而log4j-1.2-api桥接包的作用就是提供这些Log4j 1.x的API类,把调用转接到Log4j 2的核心实现上——没了它,老代码的调用就找不到对应类了。

解决办法

你有两个方向可选:

  • 保留桥接包:这是最省事的方案,不用改代码就能兼容原有Log4j 1.x的调用逻辑,同时用Log4j 2的核心功能。
  • 彻底切换到Log4j 2原生API:
    1. 全局搜项目代码,把所有import org.apache.log4j.Logger换成import org.apache.logging.log4j.Logger,日志初始化代码也要改——比如Logger.getLogger()换成LogManager.getLogger()。
    2. 查项目依赖树,把第三方库带进来的Log4j 1.x依赖(比如log4j:log4j)全排除掉。
    3. 只保留log4j-api-2.17.1.jar和log4j-core-2.17.1.jar这两个包就行。

Tomcat9与Log4j2的兼容性说明

Tomcat9本身对Log4j2没有强制要求必须用桥接包,只要你的应用完全用Log4j 2的原生API,只引入log4j-api和log4j-core就能正常跑。桥接包只是给还没完全迁移的遗留项目用的过渡方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:10:32