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

Grails 2.2.1环境下升级Log4j至2.17.2+的可行方案咨询

Grails 2.2.1 离线环境升级Log4j至2.x(≥2.17.2)的正确方案

核心问题在于Grails 2.2.1框架底层依赖Log4j 1.x的API,直接删除旧JAR会导致编译阶段找不到依赖。解决的关键是用Log4j 1.x到2.x的桥接包兼容旧API,同时正确排除旧依赖并配置新组件。

步骤1:准备离线JAR包

需要以下几个JAR包(版本统一用2.17.2避免兼容问题),放到项目的lib目录下:

  • log4j-api-2.17.2.jar
  • log4j-core-2.17.2.jar
  • log4j-1.2-api-2.17.2.jar(核心桥接包,让旧的1.x API调用自动转到2.x实现)

步骤2:修正BuildConfig.groovy配置

注意你之前的配置有拼写错误(dependecies → dependencies),并且需要在依赖阶段就排除旧的Log4j,而不是只在打包阶段删除:

dependencies {
    // 排除Grails自带的Log4j 1.x依赖
    excludes 'log4j', group: 'log4j'
    
    // 添加Log4j 2.x核心依赖
    compile 'org.apache.logging.log4j:log4j-api:2.17.2'
    compile 'org.apache.logging.log4j:log4j-core:2.17.2'
    // 引入1.x到2.x的桥接包,解决编译依赖问题
    compile 'org.apache.logging.log4j:log4j-1.2-api:2.17.2'
}

grails.war.resources = {stagingDir ->
    // 彻底清理war包中的旧Log4j 1.x文件
    delete(file:"${stagingDir}/WEB-INF/lib/log4j-1.2.16.jar")
    // 兜底删除所有其他旧版本Log4j JAR,避免遗漏
    delete(file:"${stagingDir}/WEB-INF/lib/log4j-*.jar", excludes: ['log4j-api-*.jar', 'log4j-core-*.jar', 'log4j-1.2-api-*.jar'])
}

步骤3:替换Log4j配置文件

Grails 2.2.1默认的log4j.properties/log4j.xml不再适用,需要在grails-app/conf目录下新建log4j2.xml,示例配置如下(可根据业务需求调整):

<?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>
        <!-- 可添加自定义Logger配置 -->
    </Loggers>
</Configuration>

步骤4:处理代码中的直接依赖

如果项目中有直接调用Log4j 1.x API的代码(比如import org.apache.log4j.Logger),建议逐步替换为Log4j 2.x的API:

// 旧代码
import org.apache.log4j.Logger;
Logger logger = Logger.getLogger(MyClass.class);

// 新代码
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Logger logger = LogManager.getLogger(MyClass.class);

如果暂时无法全量替换,桥接包可以兼容大部分基础调用,但复杂的1.x特性(比如自定义Appender)可能需要手动适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:17:34