我目前正在使用Logback / Markers,但还没有找到格式化Marker输出格式的方法。由于issues与MDC一起与Play结合使用,我想误用Markers在每个日志语句中打印用户名,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)
}
}
然后将它们添加到附加程序的布局中。
<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' ...
是否可以更改标记的布局?我发现this comment表示不支持并且不支持非JSON输出。
有人知道其他定制输出的方法吗?
答案 0 :(得分:0)
我刚刚弄清楚了它是如何工作的,但是它并不漂亮。
implicit def requestHeaderToMarkerContext(implicit request: RequestHeader): MarkerContext = {
import net.logstash.logback.marker.Markers._
val username = "john"
val host = "127.0.0.1"
val message = s"username='$username', host='$host',"
val value: LogstashMarker = appendFields(message)
MarkerContext(value)
}