Kotlin使用slf4j记录日志的最佳方法

时间:2019-08-30 13:53:00

标签: spring-boot logging kotlin slf4j

我有一个使用logback进行默认日志配置的spring boot项目。我一直在应用程序内部使用这种方法进行记录:

logger.info("Get user paginated: filter {}",user)

现在我正在学习Kotlin并且正在阅读有关String模板的信息。如果我使用$重写我的句子,则将是:

logger.info("Get user paginated: filter $user")

哪种方式是使用Spring Boot登录Kotlin的更好方法?

3 个答案:

答案 0 :(得分:4)

更好的方法都不是;添加https://github.com/MicroUtils/kotlin-logging并写

logger.info { "Get user paginated: filter $user" }

兼具两者的优势。

答案 1 :(得分:3)

SLF4J支持的{}语法的重点是,如果从未真正生成日志消息(例如,因为级别高于信息),则避免了无用的String串联和toString()调用。

模板字符串不能避免这种情况:需要调用user.toString()方法,并且在将其结果传递给logger.info()之前,必须将其结果附加到日志消息的静态部分。

因此,如果您要寻找最佳性能,请使用SL4J参数。如果您不在乎并发现模板字符串更易读,请使用模板字符串。

答案 2 :(得分:0)

如果您不想将 Slf4j-templates 与 {} 一起使用,并且如果您不想添加额外的依赖项,您可以将 my 32 lines kotlin-slf4j-extension 添加到您的项目中以有效地支持 kotlin 样式:

private val log = LoggerFactory.getLogger(this.javaClass)

fun log() {
    log.trace { "trace message" }
    log.debug { "debug message" }
    log.info { "info  message" }
    log.warn { "warn  message" }
    log.error { "error message" }
    log.error(IllegalStateException("throwable message")) { "exception" }
}

Slf4k 是一种不使用 kotlin 扩展的替代实现。

val log = Slf4k.getLogger {}