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

使用log4j-1.2.13等依赖在Java11+Tomcat9环境出现报错如何解决?

问题排查与解决方案

错误1:java.lang.NoSuchMethodError: org.apache.log4j.spi.LoggingEvent.getTimestamp()J

排查思路

  • 该方法是log4j 1.2.14版本才新增的API,你当前使用的log4j 1.2.13版本原生不包含该方法,优先排查依赖冲突问题:
    • 导出项目依赖树,确认是否有其他组件依赖了更高版本的log4j 1.x,或者引入了log4j-over-slf4j等桥接包,新旧类混合加载导致方法找不到
    • 检查Tomcat 9的lib目录下是否存在其他版本的log4j 1.x包,和应用WEB-INF/lib下的包产生跨应用加载冲突

解决方法

  • 方案一:升级log4j 1.x到最终稳定版1.2.17,直接兼容新增的getTimestamp()方法
  • 方案二:如果使用slf4j作为统一日志门面,移除原生log4j 1.2.13依赖,引入对应版本的log4j-over-slf4j桥接包,将log4j 1.x的日志调用路由到slf4j层统一处理

错误2:无法调用org.apache.logging.log4j.core.async.AsyncLoggerConfig类中对应AsyncLogger元素的工厂方法,报错java.lang.NoClassDefFoundError : com/lmax/disruptor/EventFactory、java.lang.reflect.InvocationException

排查思路

  • 该报错属于log4j 2.x体系的错误,说明你的项目中被其他依赖间接引入了log4j 2.x相关包,且配置了log4j 2.x的异步日志规则:
    • 导出项目依赖树,找到引入的log4j-api、log4j-core等log4j 2.x相关依赖
    • 检查类路径下是否存在log4j2.xml、log4j2.json等log4j 2.x配置文件,确认是否配置了AsyncLogger异步日志相关配置
    • log4j 2.x的异步日志功能强依赖disruptor组件,未引入该依赖就会触发类找不到报错

解决方法

  • 方案一:如果需要保留log4j 2.x异步日志能力,引入和当前log4j 2.x版本匹配的disruptor依赖即可,常规log4j 2.x版本适配disruptor 3.x及以上稳定版即可
  • 方案二:如果不需要使用log4j 2.x,排除所有间接引入的log4j 2.x相关依赖,同时删除类路径下的log4j 2.x配置文件,避免多日志实现冲突

额外提示:你当前引入的slf4j-nop是slf4j的无操作实现,会丢弃所有slf4j层面的日志输出,如果你需要正常输出日志,建议替换为slf4j-log4j12(适配log4j 1.x)或者对应log4j 2.x的slf4j适配包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 18:57:03