1、概览 {#1概览}
本文将带你了解如何在 Spring Boot 中配置 Feign 客户端的日志级别。
2、Feign 客户端 {#2feign-客户端}
Feign 是一个声明式的 HTTP 客户端,通过注解来处理模板代码。只需提供一个带注解的接口,运行时会根据注解定义创建实际的实现。
3、日志配置 {#3日志配置}
要启用日志记录,需要将应用中包含 Feign 客户端的类或包的日志记录级别设置为 DEBUG
。
给一个类设置日志级别:
logging.level.<packageName>.<className> = DEBUG
如果 Feign 接口都在同一个包下,也可以直接为整个 package
设置日志级别:
logging.level.<packageName> = DEBUG
接着,需要设置 feign 客户端的日志级别。注意,上一步只是启用日志记录。
有四种日志级别可供选择:
NONE
:无日志记录(默认)BASIC
:记录基本信息,包括请求方法和 URL 以及响应状态码和执行时间HEADERS
:记录基本信息以及请求和响应的 HeaderFULL
:记录请求和响应的 Header、Body 和元数据
可以通过 Java 配置类或在 properties 文件中进行配置。
3.1、Java 配置 {#31java-配置}
声明一个配置类 FeignConfig
:
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
然后,把配置类设置到 Feign 客户端接口 FooClient
中:
@FeignClient(name = "foo-client", configuration = FeignConfig.class)
public interface FooClient {
}
3.2、配置属性 {#32配置属性}
第二种方法是在 application.properties
中进行设置。
如下,在配置文件中通过 Feign 客户端的名称来设置日志级别,本例中是 foo-client
:
feign.client.config.foo-client.loggerLevel = full
或者,可以覆盖所有 Feign 客户端的默认配置级别:
feign.client.config.default.loggerLevel = full
4、示例 {#4示例}
配置一个 Feign 客户端,从 JSONPlaceHolder
API 检索所有用户信息。
如下,声明 UserClient
类:
@FeignClient(name = "user-client", url="https://jsonplaceholder.typicode.com", configuration = FeignConfig.class)
public interface UserClient {
@RequestMapping(value = "/users", method = RequestMethod.GET)
String getUsers();
}
还是使用上述创建的 FeignConfig
配置类作为 configuration
属性值。日志级别是 Logger.Level.FULL
。
调用 /users
API,查看输出的日志:
2021-05-31 17:21:54 DEBUG 2992 - [thread-1] com.baeldung.UserClient : [UserClient#getUsers] ---> GET https://jsonplaceholder.typicode.com/users HTTP/1.1
2021-05-31 17:21:54 DEBUG 2992 - [thread-1] com.baeldung.UserClient : [UserClient#getUsers] ---> END HTTP (0-byte body)
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.baeldung.UserClient : [UserClient#getUsers] <--- HTTP/1.1 200 OK (902ms)
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.baeldung.UserClient : [UserClient#getUsers] access-control-allow-credentials: true
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.baeldung.UserClient : [UserClient#getUsers] cache-control: max-age=43200
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.baeldung.UserClient : [UserClient#getUsers] content-type: application/json; charset=utf-8
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.baeldung.UserClient : [UserClient#getUsers] date: Mon, 31 May 2021 14:21:54 GMT
// more headers
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.baeldung.UserClient : [UserClient#getUsers] [
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
// more user details
},
// more users objects
]
2021-05-31 17:21:55 DEBUG 2992 - [thread-1] com.baeldung.UserClient : [UserClient#getPosts] <--- END HTTP (5645-byte body)
在日志的第一部分,可以看到 request
信息;采用 HTTP GET 方法的 URL 端点。由于是 GET 请求,所以没有请求 Body。
第二部分包含响应。它显示了响应的 Header 和 Body。
5、总结 {#5总结}
本文介绍了在 Spring Boot 应用中如何通过配置类或配置文件来修改 Feign 客户端的日志级别。
Ref:https://www.baeldung.com/java-feign-logging