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のセクションを削除しようとしましたが、削除しても効果はありませんでした。

Kellyが提案したように、私はすでにすべてのロギング関連のjarファイルをwarファイルから削除しています。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 に答える