【问题标题】:Multiple markers in logback pattern layoutlogback 模式布局中的多个标记
【发布时间】:2018-09-09 18:22:42
【问题描述】:

我目前正在使用 Logback/Markers,但我还没有找到格式化标记输出的方法。由于 issues 与 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' ... 

有没有办法改变标记的布局?我发现 this comment 说非 JSON 输出不受支持。

有人知道自定义输出的其他方法吗?

【问题讨论】:

    标签: scala playframework logback pattern-layout


    【解决方案1】:

    我刚刚弄清楚它是如何工作的,但它并不是超级漂亮。

    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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 2016-10-08
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      相关资源
      最近更新 更多