You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

迁移Struts 2.3.34至2.5.16引发Log4j2依赖问题求助

解决Struts 2.5迁移中Log4j2缺失实现的问题

这个问题在Struts 2.3升级到2.5的过程中非常常见,我之前帮好几个开发者处理过类似的情况。核心原因是:Struts团队从2.5版本开始,把默认日志框架从旧的Log4j 1.x换成了Log4j 2,而Log4j 2采用了API和核心实现分离的架构——你更新的Struts依赖里可能已经包含了log4j-api(日志接口),但负责实际输出日志的log4j-core(核心实现)并没有被自动引入。

下面是具体的解决步骤:

1. 补充Log4j 2核心依赖

根据你的项目构建工具,添加对应的依赖:

  • Maven项目:在pom.xml中加入以下配置:
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.1</version> <!-- 建议选择和Struts 2.5.16兼容的稳定版本,2.x系列基本都适配 -->
</dependency>
<!-- 可选但推荐:添加Web环境集成包,优化Tomcat下的日志处理逻辑 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.17.1</version>
    <scope>runtime</scope>
</dependency>
  • Gradle项目
implementation 'org.apache.logging.log4j:log4j-core:2.17.1'
runtimeOnly 'org.apache.logging.log4j:log4j-web:2.17.1'
  • 手动管理依赖:如果不用构建工具,直接从Apache官网下载log4j-core-xxx.jarlog4j-web-xxx.jar,放到项目的WEB-INF/lib目录下即可。

2. 添加Log4j 2配置文件

Log4j 2需要配置文件才能摆脱默认的SimpleLogger,创建一个log4j2.xml文件,放到src/main/resources(Maven/Gradle项目)或者WEB-INF/classes目录下,下面是一个适合Web应用的基础配置示例:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
        <!-- 可选:单独配置Struts相关日志的级别,方便调试 -->
        <Logger name="org.apache.struts2" level="debug" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>
    </Loggers>
</Configuration>

3. 排查潜在的依赖冲突

如果添加依赖后仍然报错,检查项目中是否存在旧日志框架的冲突:

  • 排除旧的Log4j 1.x依赖(比如log4j:log4j),Struts 2.5完全不再需要它;
  • 如果项目中用到了SLF4J,确保使用的是适配Log4j 2的桥接包(log4j-slf4j-impl),而非适配旧Log4j的版本。

验证效果

重启Tomcat后,控制台应该会输出Log4j 2格式的日志,不再出现Log4j2 could not find a logging implementation的错误提示。

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

火山引擎 最新活动