【问题标题】:JSON Layout with Pattern in Logback JavaLogback Java 中带有模式的 JSON 布局
【发布时间】:2020-12-29 16:08:43
【问题描述】:

我正在使用 logback 登录我的 Spring Boot 应用程序并使用以下模式:

"%d [%thread] %-5p [%c] [%F:%L] [trace=%X{X-B3-TraceId:-},span=%X{X-B3-SpanId:-}]  - %msg%n"

现在我想转移到我的日志的 JSON 布局。但我看不到将模式应用到我的日志的方法,因此上述许多信息都丢失了。

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
                <timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSX</timestampFormat>
                <timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId>
                <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                    <prettyPrint>true</prettyPrint>
                </jsonFormatter>
            </layout>
    </appender>

还有其他方法可以达到同样的效果吗?

【问题讨论】:

  • 您可以找到here 类似问题的答案。如果你认为用 Logback 实现你想要的东西很麻烦,你可能想看看 Log4j2。 Here 是一些指导。
  • 迁移到 log4j2 是不可行的。我们还必须更改代码中的日志。

标签: java logback logback-classic


【解决方案1】:

在我的logback-spring.xml 中实现JsonLayout 后,我遇到了同样的问题,我意识到我无法放入自己的自定义模式。

经过大量谷歌搜索并浪费了几个小时后,我发现了另外一种 logAppender,它允许模式并以 Json 格式打印日志。

你需要使用net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder编码器而不是JsonLayout

示例实现如下:

<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
   <providers>
     <timestamp>
       <fieldName>timestamp</fieldName>
        <pattern>yyyy-MM-dd' 'HH:mm:ss.SSS</pattern>
     </timestamp>
     <pattern> your desired pattern </pattern>
   </providers>
</encoder>

编辑: 有关详细文档,您还可以查看github link:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2016-12-28
    • 2018-07-28
    相关资源
    最近更新 更多