这是我当前的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中的调试配置会产生这个问题?。
请指导。
答案 0 :(得分:0)
不确定是否属于这种情况,但可能会将appenders
和root
部分下的所有包装规格移至有用位置。
在root中同时指定stdout
和error
的{{1}}看起来也很多。
可以选择指定特定于appender的定义(例如http://snipplr.com/view/63391/grails-log4j-for-different-environments--an-example/)以进行细粒度配置。