Вебинары Разобраться в IT Реферальная программа Тесты
Программирование Аналитика Дизайн Маркетинг Управление проектами
18 Фев 2024
2 мин
458

Логирование с использованием Retrofit 2

Пройдите тест, узнайте какой профессии подходите

Итак, тема нашего обсуждения — это логирование при использовании библиотеки Retrofit 2. Это довольно типичная проблема, с которой сталкиваются многие

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

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