Итак, тема нашего обсуждения — это логирование при использовании библиотеки Retrofit 2. Это довольно типичная проблема, с которой сталкиваются многие начинающие разработчики. Давайте начнем с примера кода, где используется OkHttpClient и создается новый Retrofit.Builder:
OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor(){ @Override public com.squareup.okhttp.Response intercept(Chain chain) throws IOException { Request request = chain.request(); System.out.println(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();
Здесь можно увидеть, что попытка логирования запроса приводит к выводу не самого запроса, а его хэш-кода. Это происходит потому, что метод toString() применяется к объекту RequestBody, что приводит к выводу хэш-кода объекта, а не его содержимого.
Так как же тогда правильно логировать при использовании Retrofit 2?
В Retrofit 2 были удалены методы setLog()
и setLogLevel()
, которые использовались в Retrofit 1. Вместо них теперь можно использовать HttpLoggingInterceptor из библиотеки OkHttp. HttpLoggingInterceptor — это удобный инструмент для логирования, который может быть легко интегрирован в OkHttpClient.
Взгляните на пример ниже:
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); logging.setLevel(HttpLoggingInterceptor.Level.BODY); OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(logging) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build();
В данном случае, используется HttpLoggingInterceptor для логирования тела запроса и ответа. Уровень логирования устанавливается с помощью метода setLevel()
. Вызов logging.setLevel(HttpLoggingInterceptor.Level.BODY)
обеспечивает вывод тела запроса и ответа.
Это наиболее подробный уровень логирования, но если нужно что-то поверхностнее, можно использовать другие уровни: BASIC
, HEADERS
, NONE
.
Таким образом, правильное логирование при использовании Retrofit 2 можно осуществить с помощью HttpLoggingInterceptor.
Добавить комментарий