Итак, тема нашего обсуждения — это логирование при использовании библиотеки 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.
Перейти в телеграм, чтобы получить результаты теста



Забрать
Добавить комментарий