在 Spring 中访问 Header 中的 logstash-logback 中的密钥 JSON 格式的引导编码

Accessing Request Header keys in logstash-logback in Spring Boot encoding in JSON format

我的用例是我需要在 spring 启动应用程序中打印 tomcat 服务器的访问日志。 日志应采用带有自定义字段名称的 JSON 格式。 像这样:

{
  "_type": "access",
  "_timestamp": "2020-12-14 09:04:51.124",
  "_url":"/api/v2/activities/search",
  "_method": "GET",
  "_response_code": 200,
  "_processing_time_in_ms":0.004,
  "referer":"https://google.com",
  "user_agent":"XYZ",
  "_level": "info
}

现在我在 logback.xml 中使用 net.logstash.logback.encoder.AccessEventCompositeJsonEncoder 编码器附加到控制台。

我已经成功获得了其他字段的值,例如 _response_code : "%statsCode 通过这样做。

但是,如何在我的自定义 json object 中直接从 request_headers object 访问 referer?

使用logstash-logback-encoder's pattern provider along with logback's conversion word for request headers%i%header)。

logstash-logback-encoder 的 README.md(上面链接)中给出的示例展示了如何做到这一点。复制在这里供参考...

<encoder class="net.logstash.logback.encoder.AccessEventCompositeJsonEncoder">
  <providers>
    <pattern>
      <pattern>
        {
        "custom_constant": "123",
        "tags": ["one", "two"],
        "remote_ip": "%a",
        "status_code": "%s",
        "elapsed_time": "%D",
        "user_agent": "%i{User-Agent}",
        "accept": "%i{Accept}",
        "referer": "%i{Referer}",
        "session": "%requestCookie{JSESSIONID}",
...
        }
      </pattern>
    </pattern>
  </providers>
</encoder>