我有一个使用logback进行默认日志配置的spring boot项目。我一直在应用程序内部使用这种方法进行记录:
logger.info("Get user paginated: filter {}",user)
现在我正在学习Kotlin并且正在阅读有关String模板的信息。如果我使用$重写我的句子,则将是:
logger.info("Get user paginated: filter $user")
哪种方式是使用Spring Boot登录Kotlin的更好方法?
答案 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 {}