这篇文章主要介绍了Feign logging 开启调用日志及原理分析,如果帮助到了大家,希望用你毛茸茸的小手点个赞;如有错误或未考虑完全的地方,希望在评论区留言
Spring Cloud OpenFeign官方文档提供了解决方案
一. Feign logging开启调用日志
@Configuration
public class FeignLogConfig {
@Bean
public Logger.Level feignLogLevel(){
/**
* 日志级别:
* NONE(不记录日志 (默认))
* BASIC(只记录请求方法和URL以及响应状态代码和执行时间)
* HEADERS(记录请求和应答的头的基本信息)
* FULL(记录请求和响应的头信息,正文和元数据)
*/
return Logger.Level.FULL;
}
}
com.itjcloud.resource.api为feignClent所在的包路径,这样配置可以达到请求此包下的所有feignClent时,都会打印日志
logging:
# 声明指定的feign service 服务的日志级别为debug,可以打印出服务调用的详情
level:
com:
itjcloud:
resource:
api: DEBUG
BannerFeignClient 为com.itjcloud.resource.api包下的其中一个feignClent,这样配置可以达到请求BannerFeignClient时,才会打印日志
logging:
# 声明指定的feign service 服务的日志级别为debug,可以打印出服务调用的详情
level:
com:
itjcloud:
resource:
api:
BannerFeignClient: DEBUG
二. 调用服务,测试打印日志信息
三. 原理分析
1.FeignLogConfig设置的Logger.Level是如何生效的
1.1 查看feign调用源码发现,SynchronousMethodHandler.invoke()中如果Logger.Level不是NONE级别,则会打印日志
通过上边源码发现,打印日志最终会调到Logger.log(),feign logger实现类Slf4jLogger在调用log方法时,会判断是否开启了debug