写点什么

SpringBoot 使用 Logbook 记录 HTTP 请求响应日志

  • 2021 年 11 月 11 日
  • 本文字数:1329 字

    阅读完需:约 4 分钟

Logbook 为 Spring Boot 用户提供了很方便的自动配置功能,即我们所熟悉的 starter 。它使用了合理的默认值自动配置了以下功能:


Servlet filter


适用于未授权请求的 Servlet filter(如果检测到项目中使用 Spring Security)


Header 过滤器、Parameter 过滤器、Body 过滤器


HTTP 格式化器、JSON 格式化器


日志写入方式


引入 starter 模块:


默认配置下,输出的日志为 JSON 格式:


Request


Response


配置


下面的表格展示了可配置的选项:



配置示例


详细用法


所有的功能集成都需要一个 Logbook 实例来完成,它保存了所有的配置并将所有需要的组件连接在一起。你可以使用所有的默认值创建一个实例:


或者使用 LogbookBuilder 创建一个自定义的版本:


在使用 starter 时,我们只需要自定义相应的 Bean 即可。


策略


Logbook 使用一个非常硬性的策略来执行请求/响应日志记录:


请求/响应分开记录


请求/响应尽快记录


请求/响应一起记录或不记录


从 2.0 版本开始,Logbook 引入了一个新的策略模式为核心,它内置了部分策略:


BodyOnlyIfStatusAtLeastStrategy


Sta


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


tusAtLeastStrategy


WithoutBodyStrategy


阶段


Logbook 工作在几个不同的阶段:


条件


过滤


格式化


记录


每个阶段都由一个或多个可以自定义的接口完成。每个阶段都有一个合理的默认值。


条件


记录 HTTP 消息并且包含其 body 的代价是非常大的,所以禁用某些请求的日志记录非常有意义。一个常见的情景就是忽略一些不必要的请求,比如 Spring Boot 的 Actuator 端点。


定义一个条件非常简单,只需要编写一个 Predicate 来决定请求是否需要记录。当然,你也可以组合预定义的 Predicate :


对与路径的包含和排除也可以通过设置 logbook.include 和 logbook.exclude 属性实现。


过滤


过滤的目的是防止记录 HTTP 请求和响应的某些敏感数据。这通常包括 Authorization 请求头,但也可以用于某些明文查询或表单参数,例如 access_token 和 password。


Logbook 支持不同类型的过滤器:


SpringBoot 使用 Logbook 记录 HTTP 请求响应日志


QueryFilter , PathFilter , HeaderFilter 和 BodyFilter 能够满足绝大多数情况下的需求,对于更复杂的需求,可以使用 RequestFilter 和 ResponseFilter 。


关联


Logbook 使用一个 id 来关联请求和响应,因为请求和响应通常位于日志文件中的不同位置。


在 Spring Cloud 应用中一般会集成 Zipkin 进行链路追踪,此时可以使用 TraceId 来关联请求和响应日志记录。


如果默认实现不满足你的需求,你可以提供一个自定义的实现:


格式化


格式化定义了如何把请求和响应转换为字符串的方式。格式化不会指定请求和响应的记录位置,这是由 writer 来完成的。


Writer


Writer 定义了格式化后的请求和响应写入的位置。Logbook 内置了三种实现:Logger,Stream 和 Chunking。


Logger


默认情况下,请求和响应使用了 slf4j 来进行日志记录,日志的级别为 trace 。你也可以自定义:


Stream


另一种实现方式是记录请求和响应到 PrintStream ,例如 System.out 或 System.err 。在生产环境中这是一个糟糕的选择,但有时对于短暂的本地开发和调试很有用。


Chunking


ChunkingSink 会把长的消息分割成较小的块,并且会委托给另一个 sink 将它们写入,只需要设置 logbook.write.chunk-size 属性即可。

评论

发布
暂无评论
SpringBoot使用Logbook记录HTTP请求响应日志