java - Slf4j,logback - 从 json 中删除 mdc 标签

我正在使用 MDC 将上下文信息添加到日志记录中:

MDC.put("Correlation-ID", UUID.randomUUID().toString()); 

我正在使用以下 logback 编码器:

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
            <timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSX</timestampFormat>
            <timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId>
            <appendLineSeparator>true</appendLineSeparator>

            <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                <prettyPrint>false</prettyPrint>
            </jsonFormatter>
        </layout>
    </encoder> 

我有以下日志:

{"timestamp":"2020-01-20T11:40:09.850Z","level":"INFO","thread":"main","mdc":{"Correlation-ID":"66f7843c-9855-450d-ad97-b1c78404f051"},"logger":"liquibase.Liquibase"...

我想删除根 mdc 标签以获得:

{"timestamp":"2020-01-20T11:40:09.850Z","level":"INFO","thread":"main","Correlation-ID":"66f7843c-9855-450d-ad97-b1c78404f051","logger":"liquibase.Liquibase"...

我该如何实现?

最佳答案

您可以使用 logstash logback JSON 编码器

将这些依赖项添加到您的 pom.xml:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>${logback.version}</version>
</dependency>

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>${logback.version}</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${jackson.version}</version>
</dependency>

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>${logstash.version}</version>
</dependency>

这是一个示例:

<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
    <providers>
        <pattern>
            <omitEmptyFields>true</omitEmptyFields>
            <pattern>
                {
                    "timestamp": "%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ}",
                    "level": "%level",
                    "thread": "%t",
                    "Correlation-ID": "%mdc{Correlation-ID}",
                    "logger": "%logger",
                    ...
                }
            </pattern>
        </pattern>
    </providers>
</encoder>

文档 here .

https://stackoverflow.com/questions/59822865/

相关文章:

vagrant 2.2.7 - 无法 vagrant up : default: Warning:

kubernetes - 从一组副本中选择一个 kubernetes pod 来执行任务

git - 无法将 'core.repositoryformatversion' 设置为 '0'

reactjs - 类型 'background' 上不存在属性 '{}' - React Rout

c# - 在 Blazor 应用程序中使用 Azure Active Directory 时如何在

go - sqlx 无法对嵌套结构使用结构扫描

excel - 查找工作表中的总行数和列数 - Microsoft Graph

android - 尝试在使用谷歌驱动器的 android 应用程序(使用 kotlin)webvi

python - PyAutoGUI,停止命令

javascript - CSS 不透明度过渡不适用于 Safari