首页 > 解决方案 > 漂亮打印 JSON 的 logback 格式化程序

问题描述

目标:我希望我的应用程序代码将非漂亮的 json 记录为字符串。需要将其作为 Splunk 的一项活动。但是,在本地登录时,如果需要,使用不同的 logback.xml,我希望它可以打印。

尝试了以下方法: 我尝试过logstashJacksonJsonFormatter. 两者似乎都没有做漂亮的印刷品。以下是配置和示例输出:

          <encoder class="net.logstash.logch.qos.logback.contrib.jsonback.encoder.LogstashEncoder">
            <fieldNames>
                <timestamp>[ignore]</timestamp>
                <level>[ignore]</level>
                <levelValue>[ignore]</levelValue>
                <thread>[ignore]</thread>
                <logger>[ignore]</logger>
                <version>[ignore]</version>
                <message/>
            </fieldNames>
            <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                <prettyPrint>true</prettyPrint>
            </jsonFormatter>
            &lt;!&ndash;<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
                <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                    <prettyPrint>true</prettyPrint>
                </jsonFormatter>
                <includeContextName>false</includeContextName>
                <appendLineSeparator>false</appendLineSeparator>
            </layout>&ndash;&gt;
        </encoder>

------
Results:
{"message":"{\"interface\":\"dynamodb client\",\"action\":\"test dynamodb connection\",\"status\":\"ok\",\"table-status\":\"ACTIVE\"}"}

请求: 有人可以建议更正我在这里所做的事情,或者提供一个提供编码器和格式化程序的好的库,在记录之前漂亮地打印一个 JSON 字符串吗?

我有的代码

代码:logger.info(statusJsonStr);

logback.xml:

<encoder>
  <pattern>%message%n</pattern>
</encoder>

控制台日志如下所示:

{"interface":"dynamodb client","action":"test dynamodb connection","status":"ok","table-status":"ACTIVE"}

类路径中的库

circe                   = "0.13.0" //for circe-core, circe-parser, circe-jawn
logbackClassic          = "1.2.3" //for  logback-classic & logback-core

    "net.logstash.logback"       % "logstash-logback-encoder" % "4.11",
    "ch.qos.logback.contrib"     % "logback-json-core"        % "0.1.2",
    "ch.qos.logback.contrib"     % "logback-json-classic"     % "0.1.2",
    "ch.qos.logback.contrib"     % "logback-jackson"          % "0.1.2",
    "com.fasterxml.jackson.core" % "jackson-core"             % "2.5.2",
    "com.fasterxml.jackson.core" % "jackson-databind"         % "2.5.2",
    "com.fasterxml.jackson.core" % "jackson-annotations"      % "2.5.2",

标签: javalogginglogbackslf4jcirce

解决方案


以下配置对我有用。

<appender name="json" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
        <jsonFormatter
                class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
            <prettyPrint>true</prettyPrint>
        </jsonFormatter>

        <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
    </layout>
</appender>

推荐阅读