1

Grails 2.1 log4j 插件似乎在grails 应用程序初始化期间重置了 log4j 配置(请参阅下面的堆栈跟踪)。

    at org.apache.log4j.LogManager.resetConfiguration(LogManager.java:233)
    at org.apache.log4j.LogManager$resetConfiguration.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
    at org.codehaus.groovy.grails.plugins.log4j.Log4jConfig.initialize(Log4jConfig.groovy:66)
    at org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:48)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4389)
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:313)
    at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:145)

有什么方法可以禁用此“功能”或完全删除此插件?

我的 JBoss 服务器已经通过 jboss-log4j.xml 进行了配置,我不希望 grails 对配置进行任何更改。我已经尝试删除log4jConfig.groovy 的部分,但这样做没有效果。

正如凯利建议的那样,我已经从我的战争文件中删除了所有与日志记录相关的 jar。Log4j 类由 JBoss 提供。

编辑我还尝试了https://stackoverflow.com/a/1190438/539048中描述的技巧,但这似乎没有任何区别。

4

3 回答 3

3

解决方案是从生成的 web.xml 文件中删除以下部分:

<listener>
    <listener-class>org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener</tag0:listener-class>
</listener>

为此,我scripts/Events.groovy根据此博客编辑了文件,但将侦听器类名称更改为org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener.

eventWebXmlEnd = {String tmpfile ->

    def root = new XmlSlurper().parse(webXmlFile)

    def log4j = root.listener.findAll {node ->
        node.'listener-class'.text() == 'org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener'
    }
    log4j.replaceNode {}

    webXmlFile.text = new StreamingMarkupBuilder().bind {
        mkp.declareNamespace("": "http://java.sun.com/xml/ns/j2ee")
        mkp.yield(root)
    }
}
于 2012-07-31T19:47:06.670 回答
1

像这样修改你的BuildConfig.groovy

inherits("global") {
    excludes 'log4j', 'jcl-over-slf4j', 'slf4j-api', 'slf4j-log4j12'
}

这应该删除所有日志库。

于 2012-07-31T02:12:10.320 回答
0

我在这个grails 应用程序上尝试了上述建议,这样我就可以期望排除 grails 的 log4j 依赖项。但是,应用建议后,预期要删除的 jar 文件仍然存在于生成的 war 文件中。这些 jar 文件是:./lib/grails-plugin-log4j-2.4.4.jar 和 ./lib/log4j-1.2.17.jar

于 2021-12-21T15:19:54.117 回答