grails - 为什么 Logback/Slf4j 在 Groovy 中记录错误的文件和行号?

标签 grails groovy logback

我注意到有时 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"])

测试.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)

最佳答案

问题发生在 GString被记录(任何正常的 String 记录正确的行号)。我不知道为什么它会这样工作,但我找到了两种解决方法:要么转换 GStringString调用toString()方法(丑陋)或使用带参数的模板格式

import groovy.util.logging.Slf4j;

@Slf4j
class Test {
    static void main(String[] args) {
        def x = 1
        log.info("Does not work: ${x}")
        log.info("Works ${x}".toString())
        log.info("Works {}", x)
    }
}

关于grails - 为什么 Logback/Slf4j 在 Groovy 中记录错误的文件和行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19917249/

相关文章:

grails - grails oracle连接超时

groovy - Groovy 中 @Delegate 和 @Mixin AST 转换之间的区别

grails - Groovy/Grails 入门?

java - 以编程方式在 logback 中添加附加程序

grails - 使用Grails存储图像,但无法在生产环境中存储在CATALINA_HOME外部

grails - Grails 集成测试中的 i18n

grails - grails服务功能的返回类型是什么?

groovy - 检查对象的多个实例时,是否还有一种更时髦的方法来实现if..else if..else?

java - 密码编辑记录器

java - 无法让日志记录与嵌入式 Jetty 一起正常工作