以下是我的日志配置。它正在记录我想要的内容,但它只是将其记录到文件中。我想在控制台上看到相同的信息。我尝试了几种变体,但是对于每种变化,我只能将信息记录到控制台或文件中,而不是两者。
def appName = grails.util.Metadata.current.'app.name'
def catalinaBase = System.properties.getProperty('catalina.base')
catalinaBase = catalinaBase ?: "."
def logDirectory = "${catalinaBase}${File.separator}logs${File.separator}${appName}"
// log4j configuration
log4j = {
appenders {
rollingFile name: 'stdout', file: "${logDirectory}${File.separator}${appName}.log".toString(), maxFileSize: '100MB' // Use the same file for stdout and stacktrace
rollingFile name: 'stacktrace', file: "${logDirectory}${File.separator}${appName}.log".toString(), maxFileSize: '100MB' // Use the same file for stdout and stacktrace
}
warn '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'
all 'grails.app.controllers.test',
'grails.app.domain.test',
'grails.app.services.test',
'grails.app.taglib.test',
'grails.app.conf.test',
'grails.app.filters.test'
}
答案 0 :(得分:2)
首先,让两个不同的appender登录到同一个文件是一个坏主意,如果你想让完整的堆栈跟踪转到与普通日志相同的位置,那么你应该重新指向 logger < / em>级别而不是 appender 级别。
对于您的实际问题,我会创建一个控制台appender和一个文件appender,并将它们都附加到 root 记录器。
log4j = {
appenders {
console name:'stdout'
rollingFile name: 'applog', file: "${logDirectory}${File.separator}${appName}.log".toString(), maxFileSize: '100MB'
'null' name:'stacktrace' // prevent Grails trying to create stacktrace.log
}
root {
warn 'stdout', 'applog'
}
// Send full stack traces to the main appName.log file
warn applog:'StackTrace'
// individual warn/all logger configurations as before
}
这会将相同的日志发送到stdout和日志文件,但只会将完整的堆栈跟踪发送到文件(而不是控制台)。如果您确实想要控制台上的完整堆栈跟踪,请将其更改为
warn applog:'StackTrace', stdout:'StackTrace'
或者,您可以考虑完全禁用StackTrace记录器(删除整个warn applog:'StackTrace'
行),然后通过将系统属性grails.full.stacktrace
设置为true
来禁用堆栈跟踪过滤,这样您就可以正常记录器记录的完整未过滤堆栈跟踪。
答案 1 :(得分:0)
使用上面的配置,例如,要将所有INFO级别的“grails.app”事件记录到控制台和“stdout”appender,您需要以下内容:
log4j = {
appenders {
... appender configuration here ...
}
// configure a root logger
root {
warn 'stdout'
additivity = false
}
info stdout:'grails.app'
info console:'grails.app'
}