使用不同的appender进行Grails日志记录配置

时间:2012-09-28 01:36:22

标签: grails log4j

这是我当前的log4j配置。问题是发展的具体部分。

log4j = {
    appenders {
        console name:'stdout',
                threshold: org.apache.log4j.Level.ERROR

        rollingFile name: "appenderAccessLog",
 ...                    
        rollingFile name: "appenderAppLog",
    ...              

        environments {
            development{
                rollingFile name: "appenderDebugLog",
                    threshold: org.apache.log4j.Level.DEBUG,
                    ....
            }
        }

    }


    error       'org.codehaus.groovy.grails.web.servlet',  //  controllers
                'org.codehaus.groovy.grails.web.pages', //  GSP
                'org.codehaus.groovy.grails.web.sitemesh', //  layouts
                'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
                'org.codehaus.groovy.grails.web.mapping', // URL mapping
                'org.codehaus.groovy.grails.commons', // core / classloading
                'org.codehaus.groovy.grails.plugins', // plugins
                'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
                'org.springframework',
                'org.hibernate',
                'net.sf.ehcache.hibernate'



    environments {
        production {
            // Override previous setting for 'grails.app.controller'
            root {
                error 'appenderAppLog','stdout'
                additivity = false
            }

        }              
                  debug additivity: false, stdout :['mycompany',
                     'mycompany.security',
                     'mycompany.common',
                     'grails.app.services.mycompany.services']

            debug additivity: false, appenderDebugLog :['mycompany',
                'mycompany.security',
                'mycompany.common',
                'grails.app.services.mycompany.services']

            root {
                error 'appenderAppLog','stdout'
                additivity = true
            }

现在,您可以看到2个带有特定包重定向到appender的调试语句。 现在如果我想使用包XXX的调试并发送到appender A和B我被迫使用上面的定义 - 它重复了debugg appender1:XXX和debug appender2:XXX包。

我查看了grails日志 - 理想情况下,以下内容应该可以解决其他调试/ appender语句:                         错误org.springframework

                    debug mycompany.packagenames...

        root {
            error 'appenderAppLog','stdout'
                            debug 'appenderDebugLog', 'stdout'
            additivity = true
        }

但是当我这样做时实际发生的是错误类别中列出的所有包 - 开始将调试消息发送到appenderDebugLog文件。当我在顶部定义每个级别时明确声明了不同的包时 - 为什么Root appender中的调试配置会产生这个问题?。

请指导。

1 个答案:

答案 0 :(得分:0)

不确定是否属于这种情况,但可能会将appendersroot部分下的所有包装规格移至有用位置。 在root中同时指定stdouterror的{​​{1}}看起来也很多。

可以选择指定特定于appender的定义(例如http://snipplr.com/view/63391/grails-log4j-for-different-environments--an-example/)以进行细粒度配置。