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对配置进行任何更改。我已经尝试删除Config.groovy的log4j
部分,但这样做没有效果。
正如凯利建议的那样,我已经从我的war文件中删除了所有与日志相关的jar。 Log4j类由JBoss提供。
编辑我也尝试了https://stackoverflow.com/a/1190438/539048中描述的技巧,但似乎没有任何区别。
答案 0 :(得分:3)
解决方案是从生成的web.xml文件中删除以下部分:
<listener>
<listener-class>org.codehaus.groovy.grails.plugins.log4j.web.util.Log4jConfigListener</tag0:listener-class>
</listener>
为此,我根据this blog编辑了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)
}
}
答案 1 :(得分:1)
像这样修改你的BuildConfig.groovy
:
inherits("global") {
excludes 'log4j', 'jcl-over-slf4j', 'slf4j-api', 'slf4j-log4j12'
}
这应删除所有日志记录库。