【问题标题】:How to write slf4j-over-logback logs as JSON如何将 slf4j-over-logback 日志写为 JSON
【发布时间】:2019-07-22 21:32:44
【问题描述】:

我的代码中有以下日志记录语句。

import org.slf4j.Logger;

public class MySampleClass {

private static final Logger logger = LoggerFactory.getLogger(MySmapleClass.class);

    public void mySampleMethod(List<String> userID) {
        logger.debug("userRuntimeId =" + userId);
        .
        .
        .
        Business Logic
        .
        .

    }
}

我的日志配置可用于: logback-common.xml

logback-local.xml

这会打印我的日志,如下所示,

2019-02-25 16:27:45,460 |调试 | [fileTaskExecutor-2] | [a.abc.mySampleApp.handlers.userRecordHandler] | [MY_SAMPLE_APP] | [Vijay-20190225-162738.trigger] | [] |用户运行时间 ID = 3051aa39-2e0a-11e9-bee3-e7388cjg5le0

我想将日志打印为 JSON。我该怎么做?

我期望的示例 JSON 格式:

{
timestamp="2019-02-25 16:27:45,460" ,
level="DEBUG",
triggerName="fileTaskExecutor-2",
className="a.abc.mySampleApp.handlers.userRecordHandler",
appName="MY_SAMPLE_APP",
userRuntimeId="3051aa39-2e0a-11e9-bee3-e7388cjg5le0"
}

【问题讨论】:

    标签: json logging logback slf4j


    【解决方案1】:

    您可以在任何 Logback 附加程序中使用 logback-contrib's JsonLayout。例如:

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
            <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                <prettyPrint>false</prettyPrint>
            </jsonFormatter>
            <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
            <appendLineSeparator>true</appendLineSeparator>
            <includeContextName>false</includeContextName>
        </layout>
    </appender>
    

    使用该配置,以下日志调用...

    logger.info("hello!");
    

    ... 将发出:

    {
      "timestamp" : "2019-03-01 08:08:32.413",
      "level" : "INFO",
      "thread" : "main",
      "logger" : "org.glytching.sandbox.logback.LogbackTest",
      "message" : "hello!"
    }
    

    这与您想要的输出非常接近,JsonLayout 是可扩展的,因此您可以...

    • 覆盖toJsonMap() 以更改键名
    • 实现addCustomDataToJsonMap() 以将其他键:值对添加到日志事件中

    更多关于 Logback JSON 扩展的细节here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多