Retrofit-Androidでリクエストとレスポンスの本文をログに記録するにはどうすればいいですか? 質問する

Retrofit-Androidでリクエストとレスポンスの本文をログに記録するにはどうすればいいですか? 質問する

Retrofit API には、完全なリクエスト/レスポンス本文をログに記録するための適切なメソッドが見つかりません。プロファイラーで何らかの助けが得られると期待していましたが (ただし、プロファイラーではレスポンスに関するメタデータのみが提供されます)、ビルダーでログ レベルを設定しようとしましたが、これも役に立ちませんでした。

RestAdapter adapter = (new RestAdapter.Builder()).
                setEndpoint(baseUrl).
                setRequestInterceptor(interceptor).
                setProfiler(profiler).
                setClient(client).
                setExecutors(MyApplication.getWebServiceThreadPool()).
                setLogLevel(LogLevel.FULL).
                setLog(new RestAdapter.Log() {
                    @Override
                    public void log(String msg) {
                        Log.i(TAG, msg);
                    }
                }).
                build();

編集: このコードは現在動作しています。以前は動作しなかった理由はわかりません。おそらく、retrofit の古いバージョンを使用していたためでしょう。

ベストアンサー1

レトロフィット 2.0:

更新: @by Marcus Pöhls

ログイン Retrofit 2

Retrofit 2 は、あらゆるネットワーク操作を OkHttp に完全に依存しています。OkHttp は Retrofit 2 のピア依存関係であるため、Retrofit 2 が安定リリースとしてリリースされたら、追加の依存関係を追加する必要はありません。

OkHttp 2.6.0 には、内部依存関係としてロギング インターセプターが付属しており、これを Retrofit クライアントに直接使用できます。Retrofit 2.0.0-beta2 では、引き続き OkHttp 2.5.0 を使用します。今後のリリースでは、依存関係が OkHttp の上位バージョンに引き上げられる予定です。そのため、ロギング インターセプターを手動でインポートする必要があります。ロギング インターセプターの依存関係を取得するには、build.gradle ファイル内の gradle インポートに次の行を追加します。

compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'

このインターセプターに関するSquareのGitHubページもご覧ください。

Retrofit 2 にログ記録を追加する

アプリの開発中やデバッグの目的で、リクエストとレスポンスの情報を表示するためのログ機能が統合されていると便利です。Retrofit 2 ではログ機能がデフォルトで統合されなくなったため、OkHttp のログ インターセプターを追加する必要があります。幸い、OkHttp にはすでにこのインターセプターが付属しており、OkHttpClient でアクティブ化するだけで済みます。

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();  
// set your desired log level
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();   
// add your other interceptors …
// add logging as last interceptor
httpClient.addInterceptor(logging);  // <-- this is the important line!
Retrofit retrofit = new Retrofit.Builder()  
        .baseUrl(API_BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .client(httpClient.build())
        .build();

最後のインターセプターとしてログ記録を追加することをお勧めします。これにより、以前のインターセプターでリクエストに追加した情報もログに記録されるためです。

ログレベル

ログに記録する情報が多すぎると Android モニターがクラッシュします。そのため、OkHttp のログ インターセプターには、NONE、BASIC、HEADERS、BODY の 4 つのログ レベルがあります。各ログ レベルについて順を追って説明し、その出力について説明します。

詳しい情報は以下をご覧ください。レトロフィット 2 — リクエストとレスポンスをログに記録する

古い答え:

Retrofit 2 では、ログ記録は行われなくなりました。開発チームはログ記録機能を削除しました。正直に言うと、ログ記録機能はそもそもそれほど信頼できるものではありませんでした。Jake Wharton は、ログに記録されたメッセージまたはオブジェクトは想定値であり、それが正しいと証明できないと明確に述べています。サーバーに到着する実際のリクエストには、変更されたリクエスト本体などが含まれている可能性があります。

デフォルトでは統合ログはありませんが、任意の Java ロガーを活用して、カスタマイズされた OkHttp インターセプター内で使用することができます。

Retrofit 2 の詳細については以下を参照してください。Retrofit — 入門と Android クライアントの作成

おすすめ記事