如何使用Logback以JSON方式登录?

Bat*_*tar 6 java spring logback slf4j

我是 SLF4J 和 Logback 的新手,我正在尝试记录此链接后 API 的每个请求和响应。这是配置

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%requestURL | status code: %statusCode | bytes: %bytesSent | elapsed time: %elapsedTime | request-log: %magenta(%requestContent) | response-log: %cyan(%responseContent)</pattern>
        </encoder>
    </appender>
    <appender-ref ref="STDOUT"/>
</configuration>
Run Code Online (Sandbox Code Playgroud)

目前正在打印:

GET /api/request HTTP/1.1 | status code: 200 | bytes: 599 | elapsed time: 2630 | request-log:  | response-log {"key1":"field1","key2":"field2"}
Run Code Online (Sandbox Code Playgroud)

我想记录类似的内容:

{
    "url": "GET /api/request HTTP/1.1",
    "status": 200,
    "elapsed_time": 2630 ,
    "response": {
        "key1":"value1",
        "key2":"value2"
    }
}
Run Code Online (Sandbox Code Playgroud)

Pra*_*dey 5

这会起作用:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <jsonFactoryDecorator class="JsonLogDecorator"/>
        <fieldNames>
            <timestamp>timeStamp</timestamp>
            <message>message</message>
            <logger>logger</logger>
            <thread>thread</thread>
            <level>level</level>
            <levelValue>[ignore]</levelValue>
            <version>[ignore]</version>
            <stackTrace>stackTrace</stackTrace>
        </fieldNames>
        <includeMdcKeyName>mdcKeyToInclude</includeMdcKeyName>
    </encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)

JsonLogDecorator 是实现JsonFactoryDecorator.