Подтвердить что ты не робот

OkHttp - включить журналы

Я использовал Retrofit для того, чтобы сделать Http-запросы и Json-синтаксический анализ, и мне понравился способ включения отладочных журналов. Журналы позволяют видеть запросы тела, url... что очень полезно. Поскольку Retrofit использует OkHttp, мне интересно, имеет ли OkHttp способ включить журналы для каждого сделанного запроса.

4b9b3361

Ответ 1

В настоящее время рассматривается функция перехватчиков, но вы можете создать свою собственную версию okHttp с помощью этой функции, применив изменения кода в запрос на pull.

Вы можете реализовать функциональность, которая вам нужна, с чем-то вроде этого

// Create an interceptor which catches requests and logs the info you want
RequestInterceptor logRequests= new RequestInterceptor() {
  public Request execute(Request request) {
    Log.i("REQUEST INFO", request.toString());
    return request; // return the request unaltered
  }
};

OkHttpClient client = new OkHttpClient();
List<RequestInterceptor> requestInterceptors = client.requestInterceptors();
requestInterceptros.add(logRequests);

Тест включен в запрос на растяжение, если вы хотите увидеть больше.

Я буду вынужден заранее предупредить вас об использовании этого. В API-интерфейсе перехватчиков могут быть изменения, поскольку он еще не объединен. Не используйте его с производством кода, но он безвреден для личного тестирования.

Ответ 2

Используя Interceptor, вы можете определить следующий класс:

class LoggingInterceptor implements Interceptor {
  @Override public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();

    long t1 = System.nanoTime();
    Log.d("OkHttp", String.format("Sending request %s on %s%n%s",
        request.url(), chain.connection(), request.headers()));

    Response response = chain.proceed(request);

    long t2 = System.nanoTime();
    Log.d("OkHttp", String.format("Received response for %s in %.1fms%n%s",
        response.request().url(), (t2 - t1) / 1e6d, response.headers()));

    return response;
  }
}

И добавьте его:

OkHttpClient client = new OkHttpClient.Builder()
  .addInterceptor(new LoggingInterceptor())
  .build();

Ответ 5

Вы можете включить ведение журнала и объединиться с Timber для входа только в отладке.

HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
      @Override
      public void log(String message) {
        Timber.tag("OkHttp: ");
        Timber.i(message);
      }
    }).setLevel(HttpLoggingInterceptor.Level.BODY);

   client = new OkHttpClient.Builder()
      .addInterceptor(httpLoggingInterceptor)
      .build();

Ответ 6

Для лучшего пользовательского интерфейса и отладки сетевых вызовов OkHttp вы можете использовать такие библиотеки, как GANDER

Другие особенности включают в себя:

  1. Приложения, использующие Gander, отобразят уведомление, показывающее сводку текущей активности HTTP. При нажатии на уведомление запускается полный интерфейс Gander. Приложения могут по желанию подавлять уведомления и запускать интерфейс Gander непосредственно из своего собственного интерфейса. HTTP-взаимодействия и их содержимое можно экспортировать с помощью общего ресурса.

  2. Поиск HTTP-активности, а также запрос и ответ

  3. Основная деятельность Gander запускается в своей собственной задаче, что позволяет отображать ее вместе с пользовательским интерфейсом хост-приложения с помощью многооконной поддержки Android 7.x.
  4. Гандер Предоставляет следующие варианты
    • Постоянство: сохраняет журналы на диск и TTL можно контролировать
    • В базе данных памяти: журналы будут храниться в памяти в течение всего жизненного цикла приложения.
    • Нет оп: это ничего не делает. Так что, если пользователи хотят, чтобы Gander был только в отладочных сборках, они могут выпустить Compile NoOp, не имея дело с вариантами, if (Build.DEBUG)..etc