Android Log.v (), Log.d (), Log.i (), Log.w (), Log.e () - Kapan harus menggunakan masing-masing?

330

Metode yang berbeda LogCatadalah:

Log.v(); // Verbose
Log.d(); // Debug
Log.i(); // Info
Log.w(); // Warning
Log.e(); // Error

Apa situasi yang tepat untuk menggunakan setiap jenis Pembalakan? Saya tahu bahwa mungkin itu hanya sedikit semantik dan mungkin itu tidak terlalu penting, tetapi untuk LogCatmemfilter di Android Studio dan Eclipse, akan menyenangkan mengetahui bahwa saya menggunakan metode yang tepat pada waktu yang tepat.

Jake Wilson
sumber

Jawaban:

726

Mari kita mulai dengan urutan terbalik:

  • Log.e : Ini untuk saat hal-hal buruk terjadi. Gunakan tag ini di tempat-tempat seperti di dalam pernyataan tangkapan. Anda tahu bahwatelah terjadi kesalahan dan karenanya Anda mencatat kesalahan.

  • Log.w : Gunakan ini ketika Anda mencurigai sesuatu yang teduh sedang terjadi. Anda mungkin tidak sepenuhnya dalam mode kesalahan, tapi mungkin Anda pulih dari beberapa perilaku yang tidak terduga. Pada dasarnya, gunakan ini untuk mencatat hal-hal yang tidak Anda harapkan terjadi tetapi tidak selalu merupakan kesalahan. Seperti "hei, ini terjadi, dan ini aneh , kita harus memeriksanya."

  • Log.i : Gunakan ini untuk mengirim informasi yang bergunake log. Misalnya: Anda telah berhasil terhubung ke server. Pada dasarnya menggunakannya untuk melaporkan keberhasilan.

  • Log.d : Gunakan ini untuktujuan debugging . Jika Anda ingin mencetak banyak pesan sehingga Anda dapat mencatat aliran yang tepat dari program Anda, gunakan ini. Jika Anda ingin menyimpan log nilai variabel, gunakan ini.

  • Log.v : Gunakan ini ketika Anda ingin benar-benar gila dengan logging Anda. Jika karena alasan tertentu Anda memutuskan untuk mencatat setiap hal kecil di bagian tertentu aplikasi Anda, gunakan tag Log.v.

Dan sebagai bonus ...

  • Log.wtf : Gunakan ini ketika segalanya benar-benar berjalan, mengerikan, suci-salah. Anda tahu blok tangkap di mana Anda menangkap kesalahan yang tidak seharusnya Anda dapatkan ... ya, jika Anda ingin mencatatnya menggunakan Log.wtf
Kurtis Nusbaum
sumber
Log.v untuk Verboselogging. Itu yang Anda gunakan ketika Anda ingin menampilkan setiap operasi logis yang mungkin.
slayton
2
Hey sobat! Saya akhirnya menemukan diri saya melakukan beberapa pekerjaan Android di Google. Dan saya menemukan ini ketika mencoba mencari cara untuk mencatat sesuatu. :)
Mysticial
11
Saya tidak percaya Log.wtfsaya bahkan memeriksanya beberapa kali dan tertawa terbahak-bahak .. Menurut pendapat saya, Semua API harus memiliki sesuatu seperti ini di dalam
MBH
57
wtf Singkatan dari "Kegagalan yang Mengerikan"
Abhishek
8
Siapa yang menyebutkan metode itu? Itu ide yang buruk. Saya bertanya-tanya bagaimana tim saya akan menghargai jika saya menamai barang-barang saya dengan hanya 1 nama huruf. Taruhan mereka akan mengirim saya ke neraka?
SandRock
19

Metode yang berbeda merupakan indikasi prioritas. Saat Anda mendaftar, mereka beralih dari yang paling penting ke yang paling penting. Saya pikir bagaimana Anda memetakannya secara khusus ke debug log dalam kode Anda tergantung pada komponen atau aplikasi yang sedang Anda kerjakan, serta bagaimana Android memperlakukannya dengan berbagai rasa build (eng, userdebug, dan pengguna). Saya telah melakukan cukup banyak pekerjaan di daemon asli di Android, dan ini adalah bagaimana saya melakukannya. Ini mungkin tidak berlaku langsung ke aplikasi Anda, tetapi mungkin ada beberapa kesamaan. Jika penjelasan saya kedengarannya kabur, itu karena sebagian dari ini lebih merupakan seni daripada sains. Aturan dasar saya adalah seefisien mungkin, memastikan Anda dapat men-debug komponen Anda secara wajar tanpa mematikan kinerja sistem, dan selalu memeriksa kesalahan dan mencatatnya.

V - Cetakan negara pada interval yang berbeda, atau pada setiap peristiwa yang terjadi yang komponen proses saya. Kemungkinan juga cetakan yang sangat rinci dari muatan pesan / peristiwa yang diterima atau dikirim komponen saya.

D - Detail peristiwa kecil yang terjadi dalam komponen saya, serta muatan pesan / peristiwa yang diterima atau dikirim komponen saya.

I - Header pesan / peristiwa apa pun yang diterima atau dikirim komponen saya, serta setiap potongan penting dari muatan yang sangat penting untuk operasi komponen saya.

W - Apa pun yang terjadi yang tidak biasa atau mencurigakan, tetapi tidak selalu merupakan kesalahan.

E - Kesalahan, artinya hal-hal yang tidak seharusnya terjadi ketika sesuatu berfungsi sebagaimana mestinya.

Kesalahan terbesar yang saya lihat orang lakukan adalah mereka terlalu sering menggunakan hal-hal seperti V, D, dan saya, tetapi tidak pernah menggunakan W atau E. Jika kesalahan, menurut definisi, tidak seharusnya terjadi, atau seharusnya hanya terjadi sangat jarang, maka itu sangat murah bagi Anda untuk mencatat pesan ketika itu terjadi. Di sisi lain, jika setiap kali seseorang menekan kunci Anda melakukan Log.i (), Anda menyalahgunakan sumber logging yang dibagikan. Tentu saja, gunakan akal sehat dan hati-hati dengan log kesalahan untuk hal-hal di luar kendali Anda (seperti kesalahan jaringan), atau yang terkandung dalam loop ketat.

Mungkin buruk

Log.i("I am here");

Baik

Log.e("I shouldn't be here");

Dengan semua ini dalam pikiran, semakin dekat kode Anda ke "siap produksi", semakin Anda dapat membatasi level logging dasar untuk kode Anda (Anda perlu V dalam alpha, D dalam beta, I dalam produksi, atau mungkin bahkan W dalam produksi ). Anda harus menjalankan beberapa kasus penggunaan sederhana dan melihat log untuk memastikan bahwa Anda sebagian besar masih dapat memahami apa yang terjadi saat Anda menerapkan pemfilteran yang lebih ketat. Jika Anda menjalankan dengan filter di bawah ini, Anda masih dapat mengetahui apa yang sedang dilakukan aplikasi Anda, tetapi mungkin tidak mendapatkan semua detailnya.

logcat -v threadtime MyApp:I *:S
John Michelau
sumber
6

Kode sumber memberikan beberapa panduan dasar:

Urutan dalam hal verbositas, dari yang paling sedikit sampai yang paling banyak adalah KESALAHAN, PERINGATAN, INFO, DEBUG, VERBOSE. Verbose tidak boleh dikompilasi ke dalam aplikasi kecuali selama pengembangan. Debug log dikompilasi tetapi dilucuti saat runtime. Kesalahan, peringatan dan log info selalu disimpan.

Untuk lebih detail, jawaban Kurtis sudah mati. Saya hanya akan menambahkan: Jangan mencatat informasi pribadi atau pribadi di INFOatau di atas ( WARN/ ERROR). Kalau tidak, laporan bug atau hal lain apa pun yang termasuk logging dapat dicemari.

Matius Baca
sumber
5

Anda dapat menggunakan LOG seperti:

Log.e(String, String) (error)
Log.w(String, String) (warning)
Log.i(String, String) (information)
Log.d(String, String) (debug)
Log.v(String, String) (verbose)

contoh kode:

private static final String TAG = "MyActivity";
...
Log.i(TAG, "MyClass.getView() — get item number " + position);
Hai Nguyen Le
sumber
3

Saya pikir inti dari berbagai jenis penebangan adalah jika Anda ingin aplikasi Anda pada dasarnya memfilter log sendiri. Jadi, Verbose bisa mencatat semua yang penting di aplikasi Anda, maka level debug akan mencatat subset dari log verbose, dan kemudian level Info akan mencatat subset dari log debug. Saat Anda masuk ke log Kesalahan, maka Anda hanya ingin mencatat segala jenis kesalahan yang mungkin terjadi. Ada juga level debug bernama Fatal ketika sesuatu benar-benar mengenai kipas di aplikasi Anda.

Secara umum, Anda benar, pada dasarnya arbitrer, dan terserah Anda untuk menentukan apa yang dianggap sebagai log debug versus informasi, versus dan kesalahan, dll. Dll.

Andi Jay
sumber
3

Meskipun pertanyaan ini sudah dijawab, saya merasa ada contoh yang hilang dalam jawaban yang dijawab.

Karena itu saya akan membawa ke sini apa yang saya tulis dalam posting blog "Android Log Levels"

Verbose

Apakah tingkat penebangan terendah. Jika Anda ingin menjadi gila dengan logging maka Anda pergi dengan level ini. Saya tidak pernah mengerti kapan harus menggunakan Verbose dan kapan harus menggunakan Debug. Perbedaannya menurut saya sangat sewenang-wenang. Saya akhirnya memahaminya begitu saya diarahkan ke kode sumber Android¹ "Verbose tidak boleh dikompilasi ke dalam aplikasi kecuali selama pengembangan." Sekarang jelas bagi saya, setiap kali Anda mengembangkan dan ingin menambahkan log yang dapat dihapus yang membantu Anda selama pengembangan, berguna untuk memiliki tingkat verbose ini akan membantu Anda menghapus semua log ini sebelum Anda mulai berproduksi.

Debug

Apakah untuk keperluan debugging. Ini adalah level terendah yang harus di produksi. Informasi yang ada di sini adalah untuk membantu selama pengembangan. Sering kali Anda akan menonaktifkan produksi log ini sehingga lebih sedikit informasi yang akan dikirim dan hanya mengaktifkan log ini jika Anda memiliki masalah. Saya suka masuk debug semua informasi yang dikirim / diterima aplikasi dari server (berhati-hatilah untuk tidak login kata sandi !!!). Ini sangat membantu untuk memahami jika bug ada di server atau aplikasi. Saya juga membuat log masuk dan keluar dari fungsi penting.

Info

Untuk pesan informasi yang menyoroti kemajuan aplikasi. Misalnya, ketika inisialisasi aplikasi selesai. Tambahkan info saat pengguna berpindah antara aktivitas dan fragmen. Catat setiap panggilan API tetapi hanya sedikit informasi seperti URL, status, dan waktu tanggapan.

Peringatan

Ketika ada situasi yang berpotensi berbahaya.

Log ini menurut pengalaman saya adalah tingkat yang sulit. Kapan Anda memiliki situasi berbahaya yang potensial? Secara umum atau tidak apa-apa atau kesalahan. Saya pribadi tidak banyak menggunakan level ini. Contoh ketika saya menggunakannya biasanya ketika barang terjadi beberapa kali. Misalnya, pengguna memiliki kata sandi yang salah lebih dari 3 kali. Ini bisa jadi karena ia salah memasukkan kata sandi 3 kali, bisa juga karena ada masalah dengan karakter yang tidak diterima di sistem kami. Sama halnya dengan masalah koneksi jaringan.

Kesalahan

Peristiwa kesalahan. Aplikasi masih dapat terus berjalan setelah kesalahan. Ini bisa menjadi contoh ketika saya mendapatkan pointer nol di mana saya tidak seharusnya mendapatkannya. Terjadi kesalahan saat menguraikan respons server. Mendapat kesalahan dari server.

WTF (Kegagalan yang Mengerikan)

Fatal adalah untuk peristiwa kesalahan parah yang akan menyebabkan aplikasi keluar. Dalam Android yang fatal pada kenyataannya adalah tingkat Kesalahan, perbedaannya adalah ia juga menambah fullstack.

Elisha Sterngold
sumber
2

Situs web Android Studio baru-baru ini (saya pikir) memberikan beberapa saran pesan seperti apa yang diharapkan dari berbagai tingkat log yang mungkin berguna bersama dengan jawaban Kurtis:

  • Verbose - Tampilkan semua pesan log (default).
  • Debug - Menampilkan pesan log debug yang hanya berguna selama pengembangan, serta tingkat pesan yang lebih rendah dalam daftar ini.
  • Info - Tampilkan pesan log yang diharapkan untuk penggunaan reguler, serta tingkat pesan yang lebih rendah dalam daftar ini.
  • Peringatkan - Tampilkan kemungkinan masalah yang belum terjadi kesalahan, serta tingkat pesan yang lebih rendah dalam daftar ini.
  • Kesalahan - Menampilkan masalah yang menyebabkan kesalahan, serta tingkat pesan yang lebih rendah dalam daftar ini.
  • Menegaskan - Tampilkan masalah yang diharapkan pengembang tidak akan pernah terjadi.
Farbod Salamat-Zadeh
sumber