java - 漂亮打印 JSON 的 logback 格式化程序
问题描述
目标:我希望我的应用程序代码将非漂亮的 json 记录为字符串。需要将其作为 Splunk 的一项活动。但是,在本地登录时,如果需要,使用不同的 logback.xml,我希望它可以打印。
尝试了以下方法:
我尝试过logstash
和JacksonJsonFormatter
. 两者似乎都没有做漂亮的印刷品。以下是配置和示例输出:
<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>
<!–<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>–>
</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",
解决方案
以下配置对我有用。
<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>
推荐阅读
- reactjs - 在运行时禁用 create-react-app webpack hot/live reload
- excel - 在 VBA 的列中返回匹配项
- javascript - 在 JSON 中为 React 表读取复杂表时需要帮助
- python - 在使用 Python 和一些 tcl 制作的 Canvas 和 Text 小部件中创建新类对象时出现问题?
- javascript - 从节点js中的html响应中获取值
- html - 自定义折叠导航栏(2 列,每列包含 2 列项目)
- python - dup2 恢复原始文件描述符
- firebase - 为什么我无法将电子邮件/密码链接到 Firebase Flutter 中 Google 登录提供商中存在的同一电子邮件?
- apache-spark - 无法使用 pyspark 加载镶木地板文件(不支持镶木地板类型:INT32 (UINT_8);)
- javascript - 如何使用 mongoDB 在下拉菜单中显示所选选项?