在Grails 2.4项目中更新log4j时遇到一些问题(顺便说一句,我认为我还没有完成)
Update log4j in Grails 2.4 results in "Could not transfer artifact from/to grailsCentral"
现在,我发现从依赖列表中删除旧的log4j版本存在问题。
非常有趣的是,Grails 2.4.2文档解释了如何从全局集中精确地排除log4j:
https://grails.github.io/grails2-doc/2.4.2/guide/conf.html#logging
这是我的依赖关系解析部分:
grails.project.dependency.resolution = {
inherits("global") {
excludes "grails-plugin-logging", "log4j"
}
log "verbose" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
checksums true // Whether to verify checksums on resolve
legacyResolve false // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility
repositories {
inherits true // Whether to inherit repository definitions from plugins
grailsPlugins()
grailsHome()
mavenLocal()
//grailsCentral()
//mavenCentral()
mavenRepo 'https://repo.grails.org/grails/plugins'
mavenRepo 'https://repo1.maven.org/maven2/'
mavenRepo 'https://repo.maven.apache.org/maven2/'
}
dependencies {
...
compile "org.apache.logging.log4j:log4j-core:2.17.1"
compile "org.apache.logging.log4j:log4j-api:2.17.1"
}
plugins {
// plugins for the build system only
....
}
}
但是,在清理并重新构建我的应用程序之后,如果运行一个依赖关系报告,log4j-1.2.17仍然会显示在那里。
更重要的是,正如我之前所说的,有些东西告诉我,我既没有使用新版本的log4j,但我不知道如何测试它。
如果我把这一点放在“排除”中:
inherits("global") {
excludes "grails-plugin-log4j", "grails-plugin-logging", "log4j"
}
则生成失败,因为
[groovyc] groovy.lang.GroovyRuntimeException: Unable to load logging class
我猜这与许多默认Grails文件都有这样一行代码有关:
import groovy.util.logging.Log4j
我开始认为在Grails中更新log4j版本几乎是不可能的。在我看来,随着上一个关于log4j的CVE(即使这个版本不受影响),他们应该发布一些文档来解释如何更新到上一个版本。
有人知道怎么正确地做吗?
1条答案
按热度按时间cqoc49vn1#
我正在尝试自己做这件事。我正在进行中,但目前看来,您似乎遗漏了一个重要部分...来自Log4J文档:
可选组件Log4j 2.x包含几个可以包含在应用程序中的可选组件。
Log4j 1.x API Bridge如果现有组件使用Log4j 1. x,并且您希望将此日志记录路由到Log4j 2,则删除任何log4j 1. x依赖项并添加以下内容。
[各种包含类型如下]
https://logging.apache.org/log4j/2.x/maven-artifacts.html