1

我们在 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"
    }
  }
}

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

4

1 回答 1

2

目前没有内置的方法来重新映射字段名称——但我们认识到它的价值。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
于 2019-03-15T20:51:18.263 回答