SpringCloud OpenFeign 整合 logbook 实现链路日志

前言

工作中我们有些生产问题出现在微服务 OpenFeign 的互相调用中,然而 OpenFeign 的调用默认是不打日志的。这给我们线上排查问题带来很大的阻力。

开启 OpenFeign 日志

我们还是选择使用配置类开启日志打印

@Configuration
public class FeignLoggerConfiguration {
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}
复制代码

level 有四个等级

  • NONE 不打日志,默认值
  • BASIC 只记录 method、url、响应码,执行时间
  • HEADERS 只记录请求和响应的 header
  • FULL 全部都记录

我们可以查看一下 FULL 等级时的日志效果。

可以看到日志内容相对来说还是很详细的,大体上是满足了线上排查 bug 的需求。

值得注意的是 Feign 的日志级别默认是 debug ,所以我们要配置 FeignClient 包的日志级别

logging:
  level:
    com.feign.test.client.ProductClient: DEBUG
复制代码

但它是专门用于 OpenFeign 的跨服务调用,不太方便能和我们系统内部的业务日志结合,于是我们可以引入另一个组件 logbook

logbook 简介

很多人可能没有接触过 logbook,但它的确是一个很好用的日志框架。引用官网的介绍

Logbook 是一个可扩展的 Java 库,可以为不同的客户端和服务器端技术启用完整的请求和响应日志记录。它通过以下方式满足了特殊需求:

  • 允许 Web 应用程序开发人员记录应用程序接收或发送的任何 HTTP 流量 ,这意味着只要是 HTTP 请求它都可以选择记录日志
  • 以一种易于持久化和分析的方式。这对于传统的日志分析、满足审计要求或调查个别历史流量问题非常有用。

具体介绍可以参考 logbook 官网

Feign.Logger 只是 Feign 组件中一个小功能,而 logbook 是一个专业的日志处理框架,很明显它们没有可比性。下面我们来感受一下 logbook 组件,它的功能要强大的多。

使用 logbook

logbook 官方提供了 logbook-spring-boot-starter ,引入依赖

implementation("org.zalando:logbook-okhttp:2.5.0")
implementation ("org.zalando:logbook-spring-boot-starter:2.5.0")
复制代码

logbook 需要配置日志级别为 TRACE,application.yml 中

logging:
  level:
    org.zalando.logbook: TRACE
复制代码

然后写个测试接口,我们可以看到日志

{
	"origin": "remote", #remote 代表远程请求,local 代表本地发出的请求 例如 Feign
	"type": "request",
	"correlation": "b2b2b8e449d7b650", #请求唯一id
	"protocol": "HTTP/1.1",
	"remote": "0:0:0:0:0:0:0:1",
	"method": "GET",
	"uri": "http://localhost:8080/consumer",
	"headers": {
		"accept": ["text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,appli
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值