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

遗留WAR应用迁移至Tomcat10后Log4J日志配置异常求助

问题分析与解决方案

核心问题拆解

  1. ClassNotFoundException 根源:你给slf4j-api和jcl-over-slf4j设置了<optional>true</optional>,这会导致Maven不将这两个依赖打包到WAR的WEB-INF/lib目录中,应用启动时自然找不到org.slf4j.Logger类。
  2. SLF4J 绑定版本不兼容:SLF4J 2.x的提供商机制和1.x完全不同,你使用的log4j-slf4j-impl是针对SLF4J 1.x的绑定,和你引入的SLF4J 2.0.12不兼容,这也是最初出现"No SLF4J providers were found"警告的核心原因。

修正后的依赖配置

替换当前日志依赖为以下内容:

<!-- 版本属性 -->
<properties>
    <log4j.version>2.22.1</log4j.version>
    <slf4j.version>2.0.12</slf4j.version>
</properties>

<!-- Logging -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>${log4j.version}</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>${slf4j.version}</version>
</dependency>
<!-- 适配SLF4J 2.x的Log4j绑定 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j2-impl</artifactId>
    <version>${log4j.version}</version>
</dependency>

关键调整说明

  • 移除optional配置:slf4j-api是应用日志的核心API,必须打包到应用中,不能设为可选。
  • 替换Log4J绑定包:log4j-slf4j2-impl是Log4j官方提供的适配SLF4J 2.x版本的绑定,能被SLF4J 2.x正确识别为日志提供商,解决最初的警告问题。
  • 移除tomcat-juli依赖:Tomcat 10.1.x自带该日志组件,无需在应用中重复引入,避免潜在冲突。

额外验证步骤

  1. 执行mvn clean package重新打包应用。
  2. 检查WAR包的WEB-INF/lib目录,确认包含slf4j-api-2.0.12.jar、log4j-core-2.22.1.jar、log4j-slf4j2-impl-2.22.1.jar这几个核心依赖。
  3. 启动Tomcat,观察日志是否正常输出,无SLF4J相关警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:50:29