介绍
我们在几个 Spring (Boot) 应用程序中结合使用 SLF4J 和 Logback,最近开始使用 logstash-logback-encoder 来实现结构化日志记录。由于我们还必须支持纯文本日志,我们想知道是否可以自动将参数附加到日志消息中,而无需使用{}
标记手动将它们添加到消息中。
所需行为的示例
为了说明所需的行为,这是我们希望的:
log.info("My message", kv("arg1", "firstArgument"), kv("arg2", "secondArgument"))
产生以下所需的输出,其中参数自动附加在消息末尾的括号中:
My message (arg1="firstArgument", arg2="secondArgument")
或者另一个在消息中同时包含显式参数和末尾的参数的示例:
log.info("Status changed: {} => {}", v("from", "READY"), v("to", "UNAVAILABLE"), kv("service", "database"))
产生以下所需的输出:
Status changed: READY => UNAVAILABLE (from="READY", to="UNAVAILABLE", service="database")
问题
SLF4J/Logback 可以做到这一点吗?如果没有,您是否知道其他日志框架或实现此目的的方法(在 Java 中)?