log4j - 在 JSON 布局中使用自定义参数 [Log4j 2]
问题描述
我对 Log4j 2 中属性替换、查找和布局参数的含义感到困惑。文档提到JSON 布局支持自定义字段。但是,它似乎不支持 %d{ISO8601}、%m、%l 等转换模式。但是它确实支持查找。
因此,当我在 xml 中定义时:
<JsonLayout complete="false" compact="false">
<KeyValuePair key="@timestamp" value="%d{ISO8601}" />
<KeyValuePair key="message" value="%message" />
<KeyValuePair key="process.thread.name" value="%tn" />
</JsonLayout >
作为输出,我只是得到 strings %d{ISO8601}
, %message
... 而不是值。
我想要实现的是一个 JSON 布局,我可以在其中包含类似于 Pattern Layout 的参数,我只需编写<pattern>%d %p %C{1.} [%t] %m%n</pattern>
它以获得我想要的东西。或者,或者,我应该使用 Pattern 布局并将 JSON 格式的字符串拼接在一起,利用 Pattern Layout 的 JSON 编码%enc{%m}{JSON}
?
解决方案
GelfLayout 当前支持 messagePattern 属性,该属性将使用 patternLayout 仅格式化 JSON 中的消息字段。我也计划将它添加到 JSONLayout 中,但还没有完成。有一个新的 JsonTemplateLayout 处于合并到 Log4j 2 的最后阶段,它也将支持这一点。您可以从当前的拉取请求中获取布局,也可以等待 Log4j 2.14.0 版本,因为这两个选项可能都可用。
推荐阅读
- python - 如何使用 Python 中的列表更新 PostgreSQL 表?
- django - 具有本机反应的 Django 通道导致此错误“预期 HTTP 101 响应但 '200 OK'”
- vue.js - 当我在 Vue 中使用 ScrollintoView 时,使用 Behavior: Smooth 不起作用
- android - 无法在 Android 应用的插页式广告中播放此视频错误
- matlab - 如何最好地解决此 MATLAB 名称冲突?
- amazon-quicksight - 如何在 AWS quicksight 中突出显示空单元格
- c# - 为什么数据不显示?在表中
- arrays - 删除数组的一个元素
- wordpress - google recaptcha v3 恢复密钥
- django - 在 django 3.2.4 中运行 django-simple-buefy