1. ホーム

[解決済み】Retrofit 2でのログ取得について

2022-04-16 14:14:56

質問

リクエストで送信されるJSONを正確に取得しようとしています。以下は私のコードです。

OkHttpClient client = new OkHttpClient();
client.interceptors().add(new Interceptor(){
   @Override public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
      Request request = chain.request();
      Log.e(String.format("\nrequest:\n%s\nheaders:\n%s",
                          request.body().toString(), request.headers()));
      com.squareup.okhttp.Response response = chain.proceed(request);
      return response;
   }
});
Retrofit retrofit = new Retrofit.Builder()
   .baseUrl(API_URL)
   .addConverterFactory(GsonConverterFactory.create())
   .client(client).build();

でも、過去ログでしか見られません。

request:
com.squareup.okhttp.RequestBody$1@3ff4074d
headers:
Content-Type: application/vnd.ll.event.list+json

の削除を考えると、どうやって適切なロギングをすればいいのでしょうか? setLog()setLogLevel() レトロフィット1で使っていた?

どのように解決するのですか?

Retrofit 2 では、次のようにします。 HttpLoggingInterceptor .

に依存関係を追加する。 build.gradle . 2019年10月時点の最新バージョンは

implementation 'com.squareup.okhttp3:logging-interceptor:4.2.1'

を作成します。 Retrofit オブジェクトを以下のように作成します。

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://backend.example.com")
        .client(client)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

return retrofit.create(ApiClient.class);

非推奨の警告が出た場合は、単純に setLevel になります。

interceptor.level(HttpLoggingInterceptor.Level.BODY);

によって設定された古いものと非常によく似たlogcatメッセージが表示されます。

setLogLevel(RestAdapter.LogLevel.FULL)

の場合 java.lang.ClassNotFoundException :

旧Retrofit版では、旧バージョンが必要な場合があります。 logging-interceptor のバージョンです。 詳しくはコメント欄をご覧ください。