1. 概要

このチュートリアルでは、FeignクライアントがSpring Bootアプリケーションにログインできるようにする方法について説明します。 また、さまざまなタイプの構成についても見ていきます。 Feignクライアントの復習については、包括的なガイドをご覧ください。

2. 偽のクライアント

Feignは、アノテーションをテンプレート化されたリクエストに処理することで機能する宣言型Webサービスクライアントです。 Feignクライアントを使用して、ボイラープレートコードを削除してHTTPAPIリクエストを作成します。 注釈付きのインターフェイスを配置する必要があります。 したがって、実際の実装は実行時に作成されます。

3. ロギング構成

偽のクライアントロギングは、行われたリクエストをよりよく把握するのに役立ちます。 ロギングを有効にするには、application.propertiesファイルにfeignクライアントを含むクラスまたはパッケージのSpringBootロギングレベルをDEBUGに設定する必要があります。 

クラスのログレベルプロパティを設定しましょう。

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

または、すべての偽のクライアントを配置するパッケージがある場合は、パッケージ全体に追加できます。

logging.level.<packageName> = DEBUG

次に、偽のクライアントのログレベルを設定する必要があります。 前の手順は、ロギングを有効にするためだけのものであることに注意してください。

選択できるロギングレベルは4つあります。

  • 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. プロパティの使用

2番目の方法は、application.propertiesで設定することです。ここで、偽のクライアントの名前(この場合は foo-client )を参照しましょう。

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

または、すべての偽のクライアントのデフォルトの構成レベルをオーバーライドできます。

feign.client.config.default.loggerLevel = full

4. 例

この例では、 JSONPlaceHolderAPIから読み取るようにクライアントを構成しました。 偽のクライアントの助けを借りて、すべてのユーザーを取得します。

以下では、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)

ログの最初の部分では、リクエストがログに記録されていることがわかります。 HTTPGETメソッドを使用したURLエンドポイント。 この場合、GET request であるため、リクエスト本文はありません。

2番目の部分には、応答が含まれています。 応答のヘッダー本体を示しています。

5. 結論

この短いチュートリアルでは、Feignクライアントのロギングメカニズムとそれを有効にする方法について説明しました。 ニーズに基づいて構成する方法は複数あることがわかりました。

いつものように、このチュートリアルに示されている例は、GitHubから入手できます。