Приведенное выше решение выдает вам сообщения logcat, очень похожие на старые, установленные
setLogLevel(RestAdapter.LogLevel.FULL)
В случае java.lang.ClassNotFoundException:
Для более старой модифицированной версии может потребоваться более старая logging-interceptor версия. Ознакомьтесь с разделами комментариев для получения подробной информации.
Ответ 2
Я столкнулся с этим, когда мы с вами пытались спросить автора книги Retrofit: любите работать с API на Android (вот ссылка) (нет! Я не делаю для них рекламу .... но они действительно хорошие ребята :) И автор ответил мне очень скоро, используя оба метода ведения журнала в Retrofit 1.9 и Retrofit 2.0-beta.
А вот и код Retrofit 2.0-beta:
HttpLoggingInterceptorlogging=newHttpLoggingInterceptor(); // set your desired log level logging.setLevel(Level.BODY);
OkHttpClienthttpClient=newOkHttpClient(); // add your other interceptors …
// add logging as last interceptor httpClient.interceptors().add(logging); // <-- this is the important line!
Вот как добавить метод ведения журнала с помощью HttpLoggingInterceptor. Также, если вы читаете ту книгу, о которой я упоминал выше, вы можете обнаружить, что в ней говорится, что метода log с Retrofit 2.0 больше не существует - что, как я спросил автора, неверно, и они обновят книгу в следующем году, рассказав об этом.
// На случай, если вы не очень хорошо знакомы с методом ведения журнала в Retrofit, я хотел бы поделиться кое-чем еще.
Также следует отметить, что вы можете выбрать несколько уровней ведения журнала. Большую часть времени я использую Level.BODY, что дает примерно следующее:
Вы можете найти почти весь http-персонал внутри изображения: заголовок, содержимое и ответ и т.д.
И иногда вам действительно не нужно, чтобы все гости присутствовали на вашей вечеринке: я просто хочу знать, успешно ли она подключена, этот интернет-вызов успешно выполнен в рамках моей активности и фрагмента. Затем вы можете свободно использовать Level.BASIC, который вернет что-то вроде этого:
Можете ли вы найти код состояния 200 OK внутри? Вот и все :)
Также есть еще один, Level.HEADERS, который будет возвращать только заголовок сети. Я, конечно, другая картинка здесь:
Вот и весь трюк с ведением журнала ;)
И я хотел бы поделиться с вами руководством, из которого я многому научился. У них есть куча отличных постов, в которых рассказывается практически обо всем, что связано с Retrofit, и они продолжают обновлять пост, в то же время выходит Retrofit 2.0. Пожалуйста, взгляните на эти работы, которые, я думаю, сэкономят вам массу времени.
Ответ 3
Вот Interceptor который регистрирует как тела запроса, так и ответа (используя Timber, основанный на примере из документов OkHttp и некоторых других ответов SO):
// now we have extracted the response body but in the process // we have consumed the original reponse and can't read it again // so we need to build a new one to return from this method
Основная проблема, с которой я столкнулся, заключалась в динамическом добавлении заголовков и регистрации их в debug logcat. Я попытался добавить два перехватчика. Один для ведения журнала, а другой для добавления заголовков на ходу (авторизация токеном). Проблема заключалась в том, что мы можем .addInterceptor или .addNetworkInterceptor. Как сказал мне Джейк Уортон: "Сетевые перехватчики всегда следуют за перехватчиками приложений. Смотрите https://github.com/square/okhttp/wiki/Interceptors". Итак, вот рабочий пример с заголовками и журналами:
OkHttpClienthttpClient=newOkHttpClient.Builder() //here we can add Interceptor for dynamical adding headers .addNetworkInterceptor(newInterceptor() { @Override public Response intercept(Chain chain)throws IOException { Requestrequest= chain.request().newBuilder().addHeader("test", "test").build(); return chain.proceed(request); } }) //here we adding Interceptor for full level logging .addNetworkInterceptor(newHttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) .build();