java - 如何使用 Logback 登录 JSON?
问题描述
我是 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>
目前正在打印:
GET /api/request HTTP/1.1 | status code: 200 | bytes: 599 | elapsed time: 2630 | request-log: | response-log {"key1":"field1","key2":"field2"}
我想记录如下内容:
{
"url": "GET /api/request HTTP/1.1",
"status": 200,
"elapsed_time": 2630 ,
"response": {
"key1":"value1",
"key2":"value2"
}
}
解决方案
这会起作用:
<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>
JsonLogDecorator 是实现JsonFactoryDecorator
.
推荐阅读
- javascript - Vue:动态组件中条件道具的约定?
- javascript - 如何更改一个特定的 CSS 类
- javafx - JavaFX 样式复选框
- c# - 如何使用 IComparable
比较 2 列表 - python - 如何以pythonic方式删除数组数组中的重复数组?
- python - 并行修改切片中的 3D numpy 数组
- ruby-on-rails - Rails 5 Custom Routes:如何创建自定义路径并用正斜杠替换 %2F
- azure - 从 Flow 中调用 Azure CDN Purge 的 REST API 返回未经授权
- c# - 如果无法更改它们,如何避免这种由 XAML 引起的命名空间冲突?
- batch-file - 批量搜索和移动特定类型的重复文件