grails - 如何在grails中禁用log4j插件?

标签 grails log4j grails-plugin

似乎 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部分,但是这样做没有任何效果。

正如Kelly所建议的,我已经从war文件中删除了所有与日志相关的jar。 JBoss提供了Log4j类。

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

最佳答案

解决方案是从生成的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)
    }
}

关于grails - 如何在grails中禁用log4j插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11731730/

相关文章:

grails - 获取HQL中的两个集合的交集

java - 从 Shiro 主题获取 grails 域对象

Grails 多对多关联查询

java - Log4j 无法登录到文件

java - log4j:输出文件取决于源调用类

grails - 将就地插件添加到 grails 3 项目

grails - 哪个选项更好地扩展了功能1)添加属性或2)创建新表?

java - Log4j2 编程消息替换(Log4j 中 PatternLayout 的替换)

Grails-Camel 插件无法安装或运行

Grails ehcache插件-同一虚拟机中已经存在另一个未命名的CacheManager