feign logging开启日志打印

这篇文章主要介绍了Feign logging 开启调用日志及原理分析,如果帮助到了大家,希望用你毛茸茸的小手点个赞;如有错误或未考虑完全的地方,希望在评论区留言

Spring Cloud OpenFeign官方文档提供了解决方案
feign logging开启日志打印_第1张图片

一. Feign logging开启调用日志

  1. 配置类
@Configuration
public class FeignLogConfig {
    @Bean
    public Logger.Level feignLogLevel(){
         /**
         *   日志级别:
         *   NONE(不记录日志 (默认))
         *   BASIC(只记录请求方法和URL以及响应状态代码和执行时间)
         *   HEADERS(记录请求和应答的头的基本信息)
         *   FULL(记录请求和响应的头信息,正文和元数据)
         */
        return Logger.Level.FULL;
    }
}
  1. yml配置文件(请求feign包下的所有feignClent时,都会打印日志)

com.itjcloud.resource.api为feignClent所在的包路径,这样配置可以达到请求此包下的所有feignClent时,都会打印日志

logging:
# 声明指定的feign service 服务的日志级别为debug,可以打印出服务调用的详情
  level: 
    com:
      itjcloud:
        resource:
          api: DEBUG
  1. yml配置文件(请求feign包下特定feignClent时,才会打印日志)

BannerFeignClient 为com.itjcloud.resource.api包下的其中一个feignClent,这样配置可以达到请求BannerFeignClient时,才会打印日志
feign logging开启日志打印_第2张图片

logging:
# 声明指定的feign service 服务的日志级别为debug,可以打印出服务调用的详情
  level: 
    com:
      itjcloud:
        resource:
          api: 
            BannerFeignClient: DEBUG

二. 调用服务,测试打印日志信息

BASIC级别日志
feign logging开启日志打印_第3张图片

HEADERS级别日志
feign logging开启日志打印_第4张图片

FULL级别日志
feign logging开启日志打印_第5张图片

三. 原理分析

1.FeignLogConfig设置的Logger.Level是如何生效的

1.1 查看feign调用源码发现,SynchronousMethodHandler.invoke()中如果Logger.Level不是NONE级别,则会打印日志
feign logging开启日志打印_第6张图片

1.2 继续跟进去发现,如果日志级别大于等于HEADERS,则输出请求头,如果级别大于等于FULL,则输出请求体
feign logging开启日志打印_第7张图片

1.3 当设置日志级别为FULL时,responseBody是如何打印的呢
feign logging开启日志打印_第8张图片
feign logging开启日志打印_第9张图片

  1. 为何在yml中设置logging.level为deug

通过上边源码发现,打印日志最终会调到Logger.log(),feign logger实现类Slf4jLogger在调用log方法时,会判断是否开启了debug
feign logging开启日志打印_第10张图片

你可能感兴趣的:(spring,cloud,java,spring,spring,boot)