以JSON格式在Spring Boot编码中访问logstash-logback中的请求头键

问题描述

我的用例是我需要在 spring boot 应用程序中打印 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 对象中直接从 request_headers 对象访问引用?

解决方法

logstash-logback-encoder's pattern providerlogback'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>