我目前正在使用 Logback/Markers,但我还没有找到格式化标记输出的方法。由于 MDC 与 Play 结合的问题,我想滥用标记来在每个日志语句中打印用户名、correlationId 和主机。
我在我的示例中设置了两个标记,“主机”和“用户”
trait RequestMarkerContext {
implicit def requestHeaderToMarkerContext(implicit request: RequestHeader): MarkerContext = {
import net.logstash.logback.marker.Markers._
val markers: java.util.Map[String, String] = new util.HashMap()
markers.put("user", "testuser")
markers.put("host", "somehost")
val value: LogstashMarker = appendEntries(markers)
MarkerContext(value)
}
}
当我将它们添加到我的 appender 的布局中时。
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSZZ} [%level] %logger - %marker %msg%n</Pattern>
</layout>
它们以 JSON 格式打印,如下所示:
2018-09-07T15:16:45.462+0200 [warn] controllers.HomeController - {host=somehost, user=testuser} ...
但我宁愿这样打印它们,因为它适合日志消息的其余部分:
2018-09-07T15:16:45.462+0200 [warn] controllers.HomeController - host='somehost', user='testuser' ...
有没有办法改变标记的布局?我发现这条评论说非 JSON 输出不受支持。
有谁知道自定义输出的任何其他方式?