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.jarlog4j-core-2.17.2.jarlog4j-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
相关产品推荐
相关产品推荐

