Nie mogę znaleźć odpowiednich metod w interfejsie Retrofit API do rejestrowania pełnych treści żądania / odpowiedzi. Spodziewałem się pomocy w Profiler (ale oferuje tylko metadane dotyczące odpowiedzi). Próbowałem ustawić poziom dziennika w Kreatorze, ale to też mi nie pomaga:
RestAdapter adapter = (new RestAdapter.Builder()).
setEndpoint(baseUrl).
setRequestInterceptor(interceptor).
setProfiler(profiler).
setClient(client).
setExecutors(MyApplication.getWebServiceThreadPool()).
setLogLevel(LogLevel.FULL).
setLog(new RestAdapter.Log() {
@Override
public void log(String msg) {
Log.i(TAG, msg);
}
}).
build();
EDYCJA: Ten kod już działa. Nie wiem, dlaczego wcześniej nie działało. Prawdopodobnie dlatego, że korzystałem ze starszej wersji modernizacji.
FULL
ma to dać ciało, ale wydaje się, że tak nie jest.Odpowiedzi:
Użyłem
setLogLevel(LogLevel.FULL).setLog(new AndroidLog("YOUR_LOG_TAG"))
, pomogło mi.AKTUALIZACJA.
Możesz także spróbować użyć do debugowania
retrofit.client.Response
jako modelu odpowiedziźródło
AndroidLog
, jaka to klasa?response body
, chociaż stwierdza w dokumencie, któryLogLevel.FULL
powinien dać ciresponse body
.Modernizacja 2.0 :
AKTUALIZACJA: @ by Marcus Pöhls
Logowanie się Retrofit 2
Retrofit 2 całkowicie opiera się na OkHttp dla dowolnej operacji w sieci. Ponieważ OkHttp jest zależnością równorzędną Retrofit 2, nie musisz dodawać dodatkowej zależności po wydaniu Retrofit 2 jako stabilnej wersji.
OkHttp 2.6.0 jest dostarczany z przechwytywaczem logów jako wewnętrzną zależnością i możesz go bezpośrednio użyć dla swojego klienta Retrofit. Retrofit 2.0.0-beta2 nadal używa OkHttp 2.5.0. Przyszłe wydania podbiją zależność do wyższych wersji OkHttp. Dlatego musisz ręcznie zaimportować przechwytywacz rejestrowania. Dodaj następujący wiersz do importu gradle w pliku build.gradle, aby pobrać zależność przechwytywacza rejestrowania.
Możesz również odwiedzić stronę Square GitHub dotyczącą tego przechwytywacza
Dodaj rejestrowanie do modernizacji 2
Podczas tworzenia aplikacji i do celów debugowania dobrze jest mieć zintegrowaną funkcję dziennika, która wyświetla informacje o żądaniach i odpowiedziach. Ponieważ rejestrowanie nie jest już domyślnie zintegrowane w Retrofit 2, musimy dodać przechwytywacz rejestrowania dla OkHttp. Na szczęście OkHttp jest już dostarczany z tym przechwytywaczem i musisz go tylko aktywować dla swojego OkHttpClient.
Zalecamy dodanie rejestrowania jako ostatniego przechwytywacza, ponieważ będzie to również rejestrować informacje, które dodałeś do poprzedniego przechwytywania do żądania.
Log Levels
Rejestrowanie zbyt dużej ilości informacji spowoduje wysadzenie monitora Android, dlatego przechwytywacz logowania OkHttp ma cztery poziomy logowania: BRAK, PODSTAWOWY, NAGŁÓWKI, CIAŁO. Przeprowadzimy Cię przez każdy z poziomów dziennika i opiszemy ich wyniki.
Więcej informacji: Retrofit 2 - Log Requests and Responses
STARA ODPOWIEDŹ:
brak logowania Retrofit 2 już. Zespół programistów usunął funkcję rejestrowania. Szczerze mówiąc, funkcja rejestrowania i tak nie była tak niezawodna. Jake Wharton wyraźnie stwierdził, że zarejestrowane wiadomości lub obiekty są wartościami założonymi i nie można ich udowodnić, że są prawdziwe. Faktyczne żądanie, które dociera do serwera, może mieć zmienioną treść żądania lub coś innego.
Mimo że domyślnie nie ma zintegrowanego rejestrowania, można wykorzystać dowolny rejestrator Java i używać go w dostosowanym przechwytywaczu OkHttp.
Więcej informacji na temat Retrofit 2 można znaleźć w: Retrofit - Getting Started and Create an Android Client
źródło
Aktualizacja dla Retrofit 2.0.0-beta3
Teraz musisz użyć okhttp3 z konstruktorem. Również stary przechwytywacz nie będzie działał. Ta odpowiedź jest dostosowana do Androida.
Oto szybkie kopiowanie wklejania z nowymi elementami.
1. Zmodyfikuj plik gradle na
2. Sprawdź ten przykładowy kod:
z nowym importem. Możesz usunąć Rx, jeśli go nie używasz, a także usunąć to, czego nie używasz.
Premia
Wiem, że to offtopic, ale uważam to za fajne.
W przypadku nieautoryzowanego kodu błędu http , oto przechwytywacz. Do transmisji zdarzenia używam magistrali eventbus.
kod pochodzi z https://github.com/AndreiD/UltimateAndroidTemplateRx (mój projekt).
źródło
Wygląda na to, że nie ma sposobu na zrobienie basic + body, ale możesz użyć FULL i filtrować nagłówki, których nie chcesz.
Wygląda na to, że podczas nadpisywania dziennika treść jest poprzedzona tagiem podobnym do
więc rejestrowanie treści basic + body powinno być łatwe, dostosowując niestandardowy filtr. Używam czarnej listy, ale w zależności od potrzeb można również użyć białej listy.
źródło
poniższy kod działa zarówno z nagłówkiem, jak i bez nagłówka, aby wydrukować żądanie dziennika i odpowiedź. Uwaga: Po prostu skomentuj wiersz .addHeader (), jeśli nie używasz nagłówka.
źródło
Mam nadzieję, że ten kod pomoże Ci się zalogować.
wystarczy, że dodasz przechwytywacz w swojej
Build.Gradle
produkcjiRetrofitClient
.Pierwszy krok
Dodaj tę linię do swojego
build.gradle
Drugi krok
Stwórz swojego klienta modernizacji
Powołanie
źródło
Jeśli używasz Retrofit2 i okhttp3, musisz wiedzieć, że Interceptor działa w kolejce. Więc dodaj loggingInterceptor na końcu, po innych Interceptorach:
źródło
ZoomX - Android Logger Interceptor to świetny przechwytywacz, który może pomóc w rozwiązaniu problemu.
źródło
W przypadku studia Android przed 3.0 (przy użyciu Android motinor)
https://futurestud.io/tutorials/retrofit-2-log-requests-and-responses
https://www.youtube.com/watch?v=vazLpzE5y9M
I dla Android Studio od 3.0 i nowszych (używanie profilera Androida jako monitora Androida jest zastępowane przez profilera Androida)
https://futurestud.io/tutorials/retrofit-2-analyze-network-traffic-with-android-studio-profiler
źródło