Feign 日誌配置

1. 概述

在本教程中,我們將描述如何讓 Feign 客戶端登錄到我們的 Spring Boot 應用程序。此外,我們將看看它的不同類型的配置。要復習 Feign 客戶端,請查看我們的綜合指南。

2. 假客戶端

**Feign是一個聲明式 Web 服務客戶端,它通過將註釋處理為模板化請求來工作。**使用 Feign 客戶端,我們擺脫了樣板代碼來發出 HTTP API 請求。我們只需要放入一個帶註釋的接口。因此,實際的實現將在運行時創建。

3. 日誌配置

Feign 客戶端日誌記錄幫助我們更好地查看已發出的請求。 application. package中包含我們的 feign 客戶端的class或包的 Spring Boot 日誌記錄級別設置為DEBUG properties文件.

讓我們為一個類設置日誌級別屬性:

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

或者,如果我們有一個包含所有 feign 客戶端的包,我們可以為整個包添加它:

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.讓我們在這裡引用我們的假客戶端的名稱,在我們的例子中是foo-client

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

或者,我們可以覆蓋所有 feign 客戶端的默認配置級別:

feign.client.config.default.loggerLevel = full

4. 例子

在這個例子中,我們配置了一個客戶端來讀取JSONPlaceHolder APIs 。我們將在 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] org.1ju.UserClient : [UserClient#getUsers] ---> END HTTP (0-byte body)
 2021-05-31 17:21:55 DEBUG 2992 - [thread-1] org.1ju.UserClient : [UserClient#getUsers] <--- HTTP/1.1 200 OK (902ms)
 2021-05-31 17:21:55 DEBUG 2992 - [thread-1] org.1ju.UserClient : [UserClient#getUsers] access-control-allow-credentials: true
 2021-05-31 17:21:55 DEBUG 2992 - [thread-1] org.1ju.UserClient : [UserClient#getUsers] cache-control: max-age=43200
 2021-05-31 17:21:55 DEBUG 2992 - [thread-1] org.1ju.UserClient : [UserClient#getUsers] content-type: application/json; charset=utf-8
 2021-05-31 17:21:55 DEBUG 2992 - [thread-1] org.1ju.UserClient : [UserClient#getUsers] date: Mon, 31 May 2021 14:21:54 GMT
 // more headers
 2021-05-31 17:21:55 DEBUG 2992 - [thread-1] org.1ju.UserClient : [UserClient#getUsers] [
 {
 "id": 1,
 "name": "Leanne Graham",
 "username": "Bret",
 "email": "[email protected]",

 // more user details
 },

 // more users objects
 ]
 2021-05-31 17:21:55 DEBUG 2992 - [thread-1] org.1ju.UserClient : [UserClient#getPosts] <--- END HTTP (5645-byte body)

在日誌的第一部分,我們可以看到記錄request帶有他的 HTTP GET 方法的 URL 端點。在這種情況下,因為它是一個 GET request ,所以我們沒有請求正文。

第二部分包含response 。它顯示response. headersbody

5. 結論

在這個簡短的教程中,我們研究了 Feign 客戶端日誌記錄機制以及如何啟用它。我們看到有多種方法可以根據我們的需要配置它。