首页 > 编程知识 正文

logbook是什么意思,springboot请求转发

时间:2023-05-05 14:40:36 阅读:186074 作者:984

前言: 2020年面试所需的Java后端高级面试问题汇总复习指南在Github上。 内容很详细,文字也排列着。 如果有需要学习的朋友的话,请试着开始。

GitHub地址: https://github.com/Abel-max/Java-study-note/tree/master

Spring Boot的httptrace端口可以记录每次访问的请求和响应信息,但不能记录主体。 这不容易在出现问题时进行故障排除,而且httptrace不方便按原样扩展,因此只能用其他方法进行记录。

Logbook是一个可扩展的Java库,为各种客户端和服务器端技术提供完整的请求和响应日志。 可以满足特别的需要。

Logbook使web APP应用程序记录器能够轻松保存和分析所有传入的HTTP通信,即使是不常用的技术和APP应用程序也可以立即使用。

特性

日志:包含body的HTTP请求和响应; 未批准的请求将记录除body外的一些日志

自定义:用于自定义记录格式、记录方式和要求记录的条件

支持框架: servlet容器、Apache’shttp客户端、square’sok http等

混淆机密数据

Spring Boot自动配置

合理的默认值

快速开始

Logbook为Spring Boot用户提供了方便的自动配置功能。 也就是说,是我们熟悉的开始者。 使用适当的默认值自动配置以下功能:

servlet填充

应用于不允许的请求的servlet文件。 如果检测到项目使用Spring Security )

头过滤器、参数过滤器、主体过滤器

HTTP格式化程序、JSON格式化程序

日志写入方式

starter模块部署:

在缺省配置中,打印的日志为JSON格式。

Request

Response

配置

下表列出了可以设置的选项。

配置示例

详细用法

的所有功能集成需要一个Logbook实例来保存所有配置并连接所有必需的组件。 可以使用所有默认值创建实例。

或者,使用LogbookBuilder创建自定义版本。

使用starter时,只需定制相应的Bean即可。

策略

Logbook使用非常硬的策略来记录请求/响应。

分开记录请求/响应

尽快记录请求/响应

请求/响应要么一起记录,要么不记录

从2.0版开始,Logbook引入了新的战略模型作为核心,并纳入了部分战略。

bodyonlyifstatusatleaststrategy

StatusAtLeastStrategy

WithoutBodyStrategy

阶段

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

条件

过滤

格式

记录

每个阶段都通过一个或多个可定制的界面执行。 每个阶段都有合理的默认值。

条件

由于记录HTTP消息并包括其主体非常昂贵,因此禁用某些请求的日志记录非常有意义。 一种常见的情况是忽略不必要的请求,例如Spring Boot的加速器端点。

定义条件非常简单,只需创建Predicate来确定请求是否需要记录。 当然,也可以组合预定义的Predicate :

也可以通过设置logbook.include和logbook.exclude属性来添加和排除路径。

过滤

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

Logbook支持各种类型的过滤器。

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

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

关联

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

在spring cloud APP应用程序中,一般集成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 属性即可。

Sink
HttpLogFormatter 和 HttpLogWriter 的组合能够适用于大部分场合,但是也有一些局限性。实现 Sink 接口可以实现更复杂的需求,例如把请求和响应持久化到数据库。

你可以使用 CompositeSink 将多个Sink合并为一个。

Servlet
在Servlet环境中,Logbook是通过 LogbookFilter 来实现的。默认情况下,对于
application/x-www-form-urlencoded 请求会同等对待,即你会在日志中看到请求body。这种方法的缺点是下游代码将无法使用任何
HttpServletRequest.getParameter*(…) 方法。

从Logbook 1.5.0开始,可以使用
logbook.servlet.form-request 系统属性(System Property)指定三种策略之一,这些策略定义Logbook如何处理这种情况:


其他框架支持
Logbook默认还提供了对HTTP Client、JAX-RS、Netty、OkHttp v2.x、OkHttp v3.x的支持,具体使用方法可以参考官方文档。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。