如何在 websphere liberty 中调整 json 日志格式

How to tweak the json log format in websphere liberty

我们在 IBM Cloud 上有一个基于自由的应用程序,我们想将结构化日志发送到 LogDNA 服务。 目前,当我们设置 com.ibm.ws.logging.message.format=json 时,它会以如下格式发出日志:

{
  "type": "",
  "host": "",
  "ibm_userDir": "",
  "ibm_serverName": "",
  "message": "",
  "ibm_threadId": "",
  "ibm_datetime": "",
  "module": "",
  "loglevel": "",
  "ibm_sequence": "",
  "ext_thread": ""
}

相反,LogDNA 最适合这样的格式:

{
  "line": "This is an awesome log statement",
  "app": "myapp",
  "level": "INFO",
  "env": "production",
  "meta": {
    "customfield": {
      "nestedfield": "nestedvalue"
    }
  }
}

有没有办法重命名 liberty 发出的 JSON 属性?

目前没有内置的方法来重新映射字段名称——但我们认识到它的价值。 https://github.com/OpenLiberty/open-liberty/issues/6079 有一个未解决的问题。请添加您的评论,以确保它涵盖您想要的内容。


更新:从 19.0.0.10 开始,现在支持此功能!

我终于可以通过将我的 server.xml 中的日志记录配置设置为如下所示来获得我期望的行为:

<logging traceSpecification="${env.TRACE_SPEC}" traceFileName="stdout" isoDateFormat="true"/>

并在我的 kubernetes 部署中设置以下环境变量:

      containers:
      - env:
        - name: TRACE_SPEC
          value: "*=info"
        - name: WLP_LOGGING_MESSAGE_FORMAT
          value: json
        - name: WLP_LOGGING_MESSAGE_SOURCE
          value: ""
        - name: WLP_LOGGING_CONSOLE_FORMAT
          value: json
        - name: WLP_LOGGING_CONSOLE_LOGLEVEL
          value: info
        - name: WLP_LOGGING_CONSOLE_SOURCE
          value: message,trace,accessLog,ffdc,audit
        - name: WLP_LOGGING_JSON_FIELD_MAPPINGS
          value: loglevel:level,ibm_datetime:timestamp