Saya tidak dapat menemukan metode yang relevan di Retrofit API untuk mencatat badan permintaan / respons lengkap. Saya mengharapkan bantuan di Profiler (tetapi itu hanya menawarkan meta-data tentang respon). Saya mencoba menyetel level log di Builder, tetapi ini juga tidak membantu saya:
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();
EDIT: Kode ini berfungsi sekarang. Saya tidak tahu mengapa itu tidak berfungsi sebelumnya. Mungkin karena saya menggunakan retrofit versi lama.
FULL
seharusnya memberikan tubuh tetapi sepertinya tidak.Jawaban:
Saya menggunakan
setLogLevel(LogLevel.FULL).setLog(new AndroidLog("YOUR_LOG_TAG"))
, itu membantu saya.MEMPERBARUI.
Anda juga dapat mencoba untuk tujuan debug digunakan
retrofit.client.Response
sebagai model responssumber
AndroidLog
, kelas apa itu?response body
, meskipun dinyatakan di dokumen yangLogLevel.FULL
seharusnya memberi Andaresponse body
.Retrofit 2.0 :
PEMBARUAN: @oleh Marcus Pöhls
Masuk Retrofit 2
Retrofit 2 sepenuhnya bergantung pada OkHttp untuk operasi jaringan apa pun. Karena OkHttp adalah dependensi peer Retrofit 2, Anda tidak perlu menambahkan dependensi tambahan setelah Retrofit 2 dirilis sebagai rilis stabil.
OkHttp 2.6.0 dikirimkan dengan interseptor logging sebagai ketergantungan internal dan Anda dapat langsung menggunakannya untuk klien Retrofit Anda. Retrofit 2.0.0-beta2 masih menggunakan OkHttp 2.5.0. Rilis selanjutnya akan meningkatkan ketergantungan ke versi OkHttp yang lebih tinggi. Itulah mengapa Anda perlu mengimpor interseptor logging secara manual. Tambahkan baris berikut ke impor gradle dalam file build.gradle Anda untuk mengambil dependensi interseptor logging.
Anda juga dapat mengunjungi halaman GitHub Square tentang pencegat ini
Tambahkan Logging ke Retrofit 2
Saat mengembangkan aplikasi Anda dan untuk tujuan debugging, ada baiknya memiliki fitur log yang terintegrasi untuk menampilkan informasi permintaan dan respons. Karena logging tidak lagi terintegrasi secara default di Retrofit 2, kita perlu menambahkan interseptor logging untuk OkHttp. Untungnya OkHttp sudah dikirimkan dengan pencegat ini dan Anda hanya perlu mengaktifkannya untuk OkHttpClient Anda.
Kami merekomendasikan untuk menambahkan logging sebagai interseptor terakhir, karena ini juga akan mencatat informasi yang Anda tambahkan dengan interseptor sebelumnya ke permintaan Anda.
Tingkat Log
Mencatat terlalu banyak informasi akan meledakkan monitor Android Anda, itulah sebabnya interseptor logging OkHttp memiliki empat level log: NONE, BASIC, HEADERS, BODY. Kami akan memandu Anda melalui setiap level log dan menjelaskan hasilnya.
informasi lebih lanjut silakan kunjungi: Retrofit 2 - Log Permintaan dan Tanggapan
JAWABAN LAMA:
tidak perlu masuk ke Retrofit 2 lagi. Tim pengembangan menghapus fitur logging. Sejujurnya, fitur logging tidak begitu andal. Jake Wharton secara eksplisit menyatakan bahwa pesan atau objek yang dicatat adalah nilai yang diasumsikan dan tidak dapat dibuktikan kebenarannya. Permintaan sebenarnya yang tiba di server mungkin memiliki badan permintaan yang berubah atau sesuatu yang lain.
Meskipun tidak ada pencatatan terintegrasi secara default, Anda dapat memanfaatkan pencatat Java apa pun dan menggunakannya dalam pencegat OkHttp yang disesuaikan.
informasi lebih lanjut tentang Retrofit 2 silakan lihat: Retrofit - Memulai dan Membuat Klien Android
sumber
Pembaruan untuk Retrofit 2.0.0-beta3
Sekarang Anda harus menggunakan okhttp3 dengan pembuatnya. Juga pencegat lama tidak akan berfungsi. Tanggapan ini disesuaikan untuk Android.
Ini salin cepat tempel untuk Anda dengan barang baru.
1. Ubah file gradle Anda menjadi
2. Periksa kode contoh ini:
dengan impor baru. Anda dapat menghapus Rx jika Anda tidak menggunakannya, juga menghapus apa yang tidak Anda gunakan.
Bonus
Saya tahu ini offtopic tapi menurut saya keren.
Jika ada kode kesalahan http yang tidak sah , ini adalah pencegat. Saya menggunakan eventbus untuk mentransmisikan acara tersebut.
kode diambil dari https://github.com/AndreiD/UltimateAndroidTemplateRx (proyek saya).
sumber
Tampaknya tidak ada cara untuk melakukan + body dasar, tetapi Anda dapat menggunakan FULL dan memfilter header yang tidak Anda inginkan.
Tampaknya saat mengganti log, badan diawali dengan tag yang mirip dengan
jadi seharusnya mudah untuk membuat log dasar + isi dengan menyesuaikan filter khusus. Saya menggunakan daftar hitam, tetapi daftar putih juga dapat digunakan tergantung kebutuhan Anda.
sumber
kode di bawah ini berfungsi baik dengan header dan tanpa header untuk mencetak permintaan & respons log. Catatan: Hanya komentar baris .addHeader () jika tidak menggunakan header.
sumber
Saya harap kode ini akan membantu Anda untuk masuk.
Anda hanya perlu menambahkan interceptor di
Build.Gradle
make AndaRetrofitClient
.Langkah pertama
Tambahkan baris ini ke
build.gradle
Tahap kedua
Buat Klien Retrofit Anda
Panggilan
sumber
Jika Anda menggunakan Retrofit2 dan okhttp3 maka Anda perlu tahu bahwa Interceptor bekerja berdasarkan antrian. Jadi tambahkan loggingInterceptor di akhir, setelah Interceptors Anda yang lain:
sumber
ZoomX - Android Logger Interceptor adalah pencegat hebat yang dapat membantu Anda memecahkan masalah Anda.
sumber
Untuk android studio sebelum 3.0 (menggunakan android motinor)
https://futurestud.io/tutorials/retrofit-2-log-requests-and-responses
https://www.youtube.com/watch?v=vazLpzE5y9M
Dan untuk android studio dari versi 3.0 ke atas (menggunakan android profiler sebagai monitor android digantikan oleh android profiler)
https://futurestud.io/tutorials/retrofit-2-analyze-network-traffic-with-android-studio-profiler
sumber