当你创建一个新的grails应用程序时,默认的logback.groovy文件(几乎每个logback.groovy 的例子,甚至是Haki先生的例子)都包含以下代码,我已将其简化为关注相关部分:
root(ERROR, ['STDOUT'])
appender("FULL_STACKTRACE", FileAppender) {
file = "build/stacktrace.log"
append = true
encoder(PatternLayoutEncoder) {
pattern = "%level %logger - %msg%n"
}
}
logger("StackTrace", ERROR, ['FULL_STACKTRACE'], false )
Run Code Online (Sandbox Code Playgroud)
但是,遵循此方法不会导致错误输出到stacktrace.log文件.
@ JeffScottBrown的答案包含以下Bootstrap.groovy文件,用于测试堆栈跟踪是否按预期记录:
class BootStrap {
def init = { servletContext ->
log.error 'this is a new error'
}
def destroy = {
}
}
Run Code Online (Sandbox Code Playgroud)
使用该引导文件,运行grails应用程序将不会产生任何输出build/stacktrace.log.
如果删除StackTrace记录器,则添加FULL_STACKTRACE到根记录器:
root(ERROR, ['STDOUT', 'FULL_STACKTRACE']
Run Code Online (Sandbox Code Playgroud)
您将获得输出到stacktrace.log.
或者,将StackTrace记录grails.app.init.Bootstrap器重命名为(感谢此行的@JeffScottBrown):
logger 'grails.app.init.BootStrap', ERROR, ['FULL_STACKTRACE'], false
Run Code Online (Sandbox Code Playgroud)
您将获得输出到stacktrace.log
这一观察让我相信 …