1. 概述

在本教程中,我们将描述如何启用 Feign 客户端登录到我们的 Spring Boot 应用程序。此外,我们还将了解它的不同类型的配置。要重温 Feign 客户端,请查看我们的综合指南

2. 假装客户端

Feign 是一个声明性 Web 服务 客户端 ,它通过将注释处理为模板化请求来工作。 使用 Feign 客户端,我们摆脱了样板代码来发出 HTTP API 请求。我们只需要放入一个带注释的接口即可。因此,实际的实现将在运行时创建。

3. 日志配置

假客户端日志记录可以帮助我们更好地查看已发出的请求。 要启用日志记录,我们需要将应用程序中包含 feign 客户端的 包的 Spring Boot 日志记录级别设置为 DEBUG 属性 文件

让我们设置一个类的日志记录级别属性:

logging.level.<packageName>.<className> = DEBUG

或者,如果我们有一个包,其中放置了所有假客户端,我们可以将其添加到整个包中:

logging.level.<packageName> = DEBUG

接下来,我们需要设置 feign 客户端的日志记录级别。请注意,上一步只是启用日志记录。

有四种日志记录级别可供选择:

  • NONE: 不记录(默认)
  • BASIC: 记录请求方法和URL以及响应状态代码和执行时间
  • HEADERS: 记录基本信息以及请求和响应标头
  • FULL :记录请求和响应的标头、正文和元数据

我们可以通过 java 配置或在属性文件中配置它们。

3.1. Java配置

我们需要声明一个配置类,我们称之为 FeignConfig

public class FeignConfig {
 
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

之后,我们将配置类绑定到我们的假客户端类 FooClient 中:

@FeignClient(name = "foo-client", configuration = FeignConfig.class)
public interface FooClient {
 
    // methods for different requests
}

3.2.使用属性

第二种方法是在我们的 application.properties 中设置它。 让我们在这里引用我们的 feign 客户端的名称,在我们的例子中是 foo-client

feign.client.config.foo-client.loggerLevel = full

或者,我们可以覆盖所有 feign 客户端的默认配置级别:

feign.client.config.default.loggerLevel = full

4. 示例

对于此示例,我们配置了一个客户端以从JSONPlaceHolder API读取。我们将在 feign 客户端的帮助下检索所有用户。

下面,我们将声明 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 。请注意,日志记录级别仍然是 Logger.Level.FULL

让我们看一下当我们调用 /users 时日志记录的样子:

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)

在日志的第一部分,我们可以看到记录的 请求 ; URL 端点及其 HTTP GET 方法。在本例中,由于它是 GET 请求 ,因此我们没有请求正文。

第二部分包含 响应 。它显示响应的 标题正文

5. 结论

在这个简短的教程中,我们了解了 Feign 客户端日志记录机制以及如何启用它。我们看到有多种方法可以根据我们的需要配置它。

与往常一样,本教程中显示的示例可以在 GitHub 上找到。