Spring Boot使用logstash-logback提取request_headers生成自定义JSON访问日志
实现请求头字段提取的配置方法
你当前使用的AccessEventCompositeJsonEncoder本身内置了从请求头中取值的能力,不需要开发自定义转换器,直接通过内置的占位符就可以提取Referer和User-Agent字段的取值,和你之前获取响应码的逻辑属于同一套占位符体系。
核心配置方式
在你现有的JSON字段定义块中,补充两个对应请求头的占位符即可:
- 提取referer字段:使用
%requestHeader{Referer}占位符,直接读取请求头中的Referer值 - 提取user_agent字段:使用
%requestHeader{User-Agent}占位符,直接读取请求头中的User-Agent值
可直接参考的完整配置片段:
<encoder class="net.logstash.logback.encoder.AccessEventCompositeJsonEncoder"> <providers> <pattern> <pattern> { "_type": "access", "_timestamp": "%date{yyyy-MM-dd HH:mm:ss.SSS}", "_url": "%requestURL", "_method": "%requestMethod", "_response_code": "%statsCode", "_processing_time_in_ms": "%D", "_level": "info", "referer": "%requestHeader{Referer}", "user_agent": "%requestHeader{User-Agent}" } </pattern> </pattern> </providers> </encoder>
常见注意事项
- 请求头的key匹配大小写不敏感,无论写
referer、Referer还是REFERER都能正确匹配到对应请求头值 - 当对应请求头不存在时,占位符会自动返回空字符串,不会抛出空指针异常,无需额外编写判空逻辑
- 不建议直接将整个request_headers序列化到JSON后再拆分取值,直接使用内置占位符的性能开销更低,也不会引入多余的冗余字段
内容的提问来源于stack exchange,提问作者rahul_vyas
相关产品推荐
相关产品推荐

