1. 概述
在本教程中,我們將描述如何啓用 Feign 客户端以登錄到我們的 Spring Boot 應用程序。 此外,我們還將探討不同類型的配置方案。 如果您需要有關 Feign 客户端的全面瞭解,請查看我們的綜合指南。
2. Feign 客户端
Feign 是一個聲明式的 Web 服務 客户端,它通過將註解轉換為模板化的請求來工作的。 使用 Feign 客户端,我們可以擺脱樣板代碼,從而簡化 HTTP API 請求。 我們只需要提供一個帶有註解的接口。 這樣,實際的實現將在運行時創建。
3. 日誌配置
Feign 客户端日誌有助於我們更好地瞭解已發送的請求。要啓用日誌記錄,我們需要將 Spring Boot 日誌級別設置為 <em >DEBUG </em >,應用於包含 Feign 客户端的 <em >類 </em > 或 <em >包 </em >> 在 <em >application.properties </em > 文件中。
讓我們設置一個類的日誌級別:
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;
}
}之後,我們將配置類綁定到我們的 feign 客户端類 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 = full4. 示例
對於本示例,我們已配置客户端從 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": "[email protected]",
// 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)在日誌的第一個部分中,我們可以看到請求被記錄下來;該 HTTP GET 方法的 URL 端點。在這種情況下,由於這是一個 GET 請求,因此我們沒有請求體。
第二個部分包含響應。它顯示了頭信息和響應的內容。
5. 結論
在本教程中,我們探討了 Feign 客户端的日誌機制及其啓用方法。我們瞭解到可以通過多種方式配置該機制,以滿足我們的需求。