2012-07-31 57 views
1

看起來Grails 2.1 log4j插件在grails應用程序的初始化期間重置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對配置進行任何更改。我已經嘗試刪除Config.groovy的log4j部分,但這樣做沒有效果。

正如Kelly所說,我已經從我的war文件中刪除了所有與日誌相關的jar。 Log4j類由JBoss提供。

EDIT我也嘗試了https://stackoverflow.com/a/1190438/539048中描述的技巧,但這似乎沒有任何區別。

回答

3

的解決方案是從所生成的web.xml文件刪除的以下部分:

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

爲此,我編輯scripts/Events.groovy文件根據this blog但改變了聽者類名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) 
    } 
} 
+1

如果這會將前綴tag0添加到web.xml中的所有標記名稱,並且您不希望將其添加到那裏,請使用名稱空間http://java.sun.com/xml/ns/javaee而不是http:// java.sun.com/xml/ns/j2ee。 – Palo 2012-11-07 12:06:06

1

修改您BuildConfig.groovy這樣的:

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

這應該刪除所有日誌庫。

+0

我的戰爭檔案中沒有記錄罐(我已經完成了與你的建議相同的工作)。我在這個問題上更明確地表達了這一點。另外還要注意,它是一個grails插件('org.codehaus.groovy.grails.plugins.log4j.Log4jConfig')。 – GreenGiant 2012-07-31 15:05:46