【发布时间】:2013-11-11 22:30:01
【问题描述】:
我注意到有时 Logback/Slf4j 在 Groovy 中记录错误的文件和行号。
我的 Grails 应用程序中有很多错误的文件/行号日志(超过所有日志的 50%)
有什么解决方法吗?
最简单的例子:
logback.groovy
appender("STDOUT", ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = '%d{HH:mm:ss.SSS} [%-5level] %msg \\(%file:%line\\)%n'
}
}
root(DEBUG, ["STDOUT"])
Test.groovy
@Slf4j
class Test {
static void main(String[] args) {
log.info("${'Wrong file and line number!'}")
}
}
输出
23:24:23.894 [INFO ] 0 Wrong file and line number! (NativeMethodAccessorImpl.java:-2)
我的 grails 日志输出有问题的示例
10:16:44.881 [DEBUG] [org.grails.plugin.resource.ResourceProcessor] -------------------------------------------------- (null:-1)
【问题讨论】:
-
也许 logback 的 %file 和 %line 方法会偷偷预览堆栈帧并使用它?因为 groovy 中的 log.info 将嵌入动态调度中,这解决了使用NativeMethodAccessorImpl。所以也许 %file 和 %line 在 Groovy 中不起作用。