Feign的日志
上一篇:Feign对于压缩的支持
下一篇:provider集群和负载均衡 ribbon
很多场景下,需要了解 Feign 处理请求的具体细节, 那么如何满足这种需求呢?
简单介绍
Feign 对日志的处理非常灵活, 可为每个 Feign 客户端指定日志记录策略 , 每个 Feign 客户端都会创建一个logger。
默认情况下, logger的名称是 Feign 接口的完整类名。需要注意的是, Feign 的日志打印只会对 DEBUG 级别做出响应。
我们可为 每个 Feign 客户端配置各自的 Logger.Level 对象,告诉 Feign 记录哪些日志。Log
ger.Level 的值有以下选择。
.NONE: 不记录任何日志( 默认值)。
.BASIC : 仅记录请求方法 、URL、响应状态代码以及执行时间。
.HEADERS: 记录 BASIC 级别的基础上, 记录请求和响应的 header。
.FULL: 记录请求和响应的header , body 和元数据。
为前面编写的UserFeignClient 添加日志打印, 将它的日志级 别设置为FULL。
1 找到 comsumer 项目
2 编写 Feign 配置类创建一个包config
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyConfiguration {
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
/*
full:返回所有日志
NONE:不返回日志
BASIC:
HEADERS:
*/
}
}
3 修改 Feign 的接口, 指定配置类
@FeignClient(name = "provider",configuration = MyConfiguration.class)
@Component
public interface UserFeignClient {
@RequestMapping("user/{id}")
public User findById(@PathVariable(value = "id") Integer id);
//restful传多个参
@RequestMapping("search/{id}/{username}/{name}")
public User search(@PathVariable(value = "id") Integer id,@PathVariable("username") String username,@PathVariable("name") String name);
@RequestMapping("search2")
public User search2(@RequestParam("id") Integer id, @RequestParam("username") String username, @RequestParam("name") String name);
}
4 在 application.yml 中添加以下内容, 指定 Feign 接口的日志级别为DEBUG:
logging:
level:
com.itzz.springcloudconsumer: DEBUG
5 测试
重启后访问
2020-07-20 15:10:55.922 DEBUG 15124 --- [nio-8010-exec-1] c.i.s.api.UserFeignClient : [UserFeignClient#findById] <--- HTTP/1.1 200 (433ms)
2020-07-20 15:10:55.922 DEBUG 15124 --- [nio-8010-exec-1] c.i.s.api.UserFeignClient : [UserFeignClient#findById] content-type: application/json;charset=UTF-8
2020-07-20 15:10:55.922 DEBUG 15124 --- [nio-8010-exec-1] c.i.s.api.UserFeignClient : [UserFeignClient#findById] date: Mon, 20 Jul 2020 07:10:55 GMT
2020-07-20 15:10:55.922 DEBUG 15124 --- [nio-8010-exec-1] c.i.s.api.UserFeignClient : [UserFeignClient#findById] transfer-encoding: chunked
2020-07-20 15:10:55.922 DEBUG 15124 --- [nio-8010-exec-1] c.i.s.api.UserFeignClient : [UserFeignClient#findById]
2020-07-20 15:10:55.925 DEBUG 15124 --- [nio-8010-exec-1] c.i.s.api.UserFeignClient : [UserFeignClient#findById] {"id":1,"username":"account1","name":"张 三","age":20,"balance":100.00}
2020-07-20 15:10:55.925 DEBUG 15124 --- [nio-8010-exec-1] c.i.s.api.UserFeignClient : [UserFeignClient#findById] <--- END HTTP (73-byte body)