Bergabunglah bersama kami di ⁠#Android11: The Beta Launch Show pada tanggal 3 Juni!

Alat command line logcat

Logcat adalah alat command line yang mengeluarkan log pesan sistem, termasuk pelacakan tumpukan saat perangkat menampilkan error dan pesan yang telah Anda tulis dari aplikasi dengan class Log.

Halaman ini membahas tentang alat command line logcat, tetapi Anda juga bisa melihat pesan log dari jendela Logcat pada Android Studio. Untuk informasi cara menampilkan dan memfilter log dari Android Studio, lihat Menulis dan Menampilkan Log dengan Logcat.

Sintaks command line

Untuk menjalankan logcat melalui shell adb, penggunaan umumnya adalah:

    [adb] logcat [<option>] ... [<filter-spec>] ...
    

Anda dapat menjalankan logcat sebagai perintah adb atau secara langsung di prompt shell dari emulator atau perangkat tersambung. Untuk melihat output log menggunakan adb, buka direktori platform-tools/ SDK lalu jalankan:

    adb logcat
    

Untuk bantuan online logcat, mulai perangkat lalu jalankan:

    adb logcat --help
    

Anda dapat membuat koneksi shell ke perangkat dan menjalankan:

    $ adb shell
    # logcat
    

Opsi

Tabel berikut menjelaskan opsi command line logcat.

Opsi Deskripsi
-b <buffer> Memuat buffer log alternatif untuk melihat, seperti events atau radio. Kumpulan buffer main, system, dan crash digunakan secara default. Lihat Menampilkan Buffer Log Alternatif.
-c, --clear Menghapus (flush) buffer yang dipilih, lalu keluar. Kumpulan buffer default adalah main, system, dan crash. Untuk menghapus semua buffer, gunakan -b all -c.
-e <expr>, --regex=<expr> Hanya mencetak baris yang pesan log-nya cocok dengan <expr>, di mana <expr> merupakan ekspresi reguler.
-m <count>, --max-count=<count> Berhenti setelah mencetak <count> jumlah baris. Opsi ini dimaksudkan untuk dipasangkan dengan --regex, tetapi akan berfungsi dengan sendirinya.
--print Dipasangkan dengan --regex dan --max-count untuk memungkinkan konten mengabaikan filter regex, tetapi tetap berhenti pada jumlah kecocokan yang tepat.
-d Mengeluarkan log ke layar, lalu keluar.
-f <filename> Menulis output pesan log ke <filename>. Default-nya adalah stdout.
-g, --buffer-size Mencetak ukuran buffer log yang ditetapkan, lalu keluar.
-n <count> Menyetel jumlah maksimum log yang dirotasi ke <count>. Nilai default-nya adalah 4. Memerlukan opsi -r.
-r <kbytes> Merotasi file log setiap <kbytes> dari output. Nilai default-nya adalah 16. Memerlukan opsi -f.
-s Setara dengan '*:S' ekspresi filter, yang menetapkan prioritas untuk semua tag ke senyap, dan digunakan untuk mendahului daftar ekspresi filter yang menambahkan konten. Untuk mempelajari lebih lanjut, buka bagian tentang memfilter output log.
-v <format> Menetapkan format output untuk pesan log. Default-nya adalah format threadtime. Untuk daftar format yang didukung, buka bagian tentang Mengontrol format output log.
-D, --dividers Mencetak pembagi antara setiap buffer log.
-c Menghapus (flush) seluruh log, lalu keluar.
-t <count> Mencetak hanya jumlah baris terbaru. Opsi ini menyertakan fungsionalitas -d.
-t '<time>' Mencetak baris terbaru sejak waktu yang ditentukan. Opsi ini menyertakan fungsionalitas -d. Lihat opsi -P untuk informasi cara mengutip parameter dengan spasi tersemat.

adb logcat -t '01-26 20:52:41.820'
-T <count> Mencetak jumlah baris terbaru sejak waktu yang ditentukan. Opsi ini tidak menyertakan fungsionalitas -d
-T '<time>' Mencetak baris terbaru sejak waktu yang ditentukan. Opsi ini tidak menyertakan fungsionalitas -d. Lihat opsi -P untuk informasi cara mengutip parameter dengan spasi tersemat.

adb logcat -t '01-26 20:52:41.820'
-L, -last Mengeluarkan log sebelum reboot terakhir.
-B, --binary Meng-output log dalam biner.
-S, --statistics Menyertakan statistik dalam output untuk membantu Anda mengidentifikasi dan menargetkan spammer log.
-G <size> Menetapkan ukuran buffer ring log. Dapat menambahkan K atau M di bagian akhir untuk menunjukkan kilobyte atau megabyte.
-p, --prune Mencetak (membaca) daftar diizinkan dan diblokir terbaru dan tidak menggunakan argumen apa pun, sebagai berikut:

    adb logcat -p
    
-P '<list> ...'
--prune '<list> ...' -P '<white_and_black_list>'
Menulis (menetapkan) daftar diizinkan dan diblokir untuk menyesuaikan konten logging untuk keperluan tertentu. Anda memberikan konten campuran antara entri daftar <white> dan ~<black>, dengan <white> atau <black> dapat berupa UID, UID/PID, atau /PID. Dengan mengacu pada statistik logcat (logcat -S), Anda dapat mempertimbangkan penyesuaian pada daftar yang diizinkan dan diblokir untuk keperluan seperti:
  • Memberikan umur terpanjang kepada konten logging tertentu melalui pemilihan UID.
  • Memblokir siapa (UID) atau apa (PID) yang memakai resource ini untuk membantu meningkatkan logspan, sehingga Anda memiliki akses lebih luas ke masalah yang Anda diagnosis.

Secara default, sistem logging otomatis memblokir pelanggar terburuk dalam statistik log secara dinamis untuk memberi ruang bagi pesan log baru. Setelah heuristik habis, sistem akan memangkas entri yang paling lama untuk memberi ruang bagi pesan baru.

Penambahan daftar diizinkan akan melindungi nomor Identifikasi Android (AID) Anda, yang menjadi AID dan GID proses, sehingga tidak dinyatakan sebagai pelanggar. Penambahan daftar diblokir akan membantu Anda mengosongkan ruang sebelum mempertimbangkan pelanggar terburuk. Anda dapat memilih seberapa aktif pemangkasan ini, dan dapat menonaktifkan pemangkasan sehingga hanya menghapus konten dari entri terlama di setiap buffer log.

Tanda kutip

adb logcat tidak mempertahankan tanda kutip, sehingga sintaks untuk menentukan daftar yang diizinkan dan diblokir adalah sebagai berikut:


    $ adb logcat -P '"<white_and_blacklist>"'

    or

    adb shell
    $ logcat -P '<white_and_blacklist>'
    

Contoh berikut menetapkan daftar diizinkan dengan PID 32676 dan UID 675, serta daftar diblokir dengan PID 32677 dan UID 897. PID 32677 pada daftar diblokir diberi pembobotan untuk mempercepat pemangkasan.


    adb logcat -P '"/32676 675 ~/32677 897"'
    

Variasi perintah daftar diizinkan dan diblokir lainnya yang dapat Anda gunakan adalah sebagai berikut:


    ~! worst uid blacklist
    ~1000/! worst pid in system (1000)
    
--pid=<pid> ... Hanya mencetak log dari PID yang ditentukan.
--wrap Tidur selama 2 jam atau saat buffer akan segera digabung, salah satu yang terjadi lebih dulu. Meningkatkan efisiensi polling dengan menyediakan layanan membangunkan saat buffer akan segera digabung.

Memfilter log output

  • Tag dari sebuah pesan log adalah string singkat yang menunjukkan komponen sistem dari mana pesan tersebut berasal (misalnya "View" untuk sistem tampilan).
  • Prioritasnya adalah salah satu dari nilai karakter berikut, diurutkan dari prioritas terendah ke tertinggi:
    • V: Verbose (prioritas terendah)
    • D: Debug
    • I: Info
    • W: Warning
    • E: Error
    • F: Fatal
    • S: Silent (prioritas tertinggi, tidak ada apa pun yang dicetak)

Anda dapat memperoleh daftar tag yang digunakan dalam sistem, beserta prioritasnya, dengan menjalankan logcat dan mengamati dua kolom pertama setiap pesan, yang diberikan sebagai <priority>/<tag>.

Berikut adalah contoh output logcat singkat yang diperoleh dengan perintah logcat -v brief output. Ini menunjukkan bahwa pesan tersebut berkaitan dengan tingkat prioritas "I" dan tag "ActivityManager":

    I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
    

Untuk mengurangi output log ke tingkat yang mudah dikelola, Anda dapat membatasi output log menggunakan ekspresi filter. Ekspresi filter memungkinkan Anda menunjukkan kombinasi tanda-prioritas yang Anda minati kepada sistem — sistem akan menyembunyikan pesan lain untuk menampilkan tag yang ditetapkan tersebut.

Ekspresi filter mengikuti format tag:priority ... ini, di mana tag menunjukkan tag yang diminati dan priority menunjukkan tingkat minimum prioritas yang akan dilaporkan untuk tag tersebut. Pesan untuk tag tersebut, yang berada pada atau di atas tingkat prioritas yang ditentukan, akan ditulis ke log. Anda dapat menyediakan berapa pun spesifikasi tag:priority dalam ekspresi filter tunggal. Rangkaian spesifikasi dibatasi oleh spasi.

Berikut adalah contoh ekspresi filter yang menyembunyikan semua pesan log kecuali yang memiliki tag "ActivityManager" dengan prioritas "Info" atau lebih tinggi, dan semua pesan log yang memiliki tag "MyApp" dengan prioritas "Debug" atau lebih tinggi:

    adb logcat ActivityManager:I MyApp:D *:S
    

Elemen terakhir dalam ekspresi di atas, *:S, menetapkan tingkat prioritas untuk semua tag ke "silent", yang memastikan bahwa sistem hanya akan menampilkan pesan log dengan tag "ActivityManager" dan "MyApp". Menggunakan *:S adalah cara terbaik untuk memastikan bahwa output log dibatasi ke filter yang telah Anda tetapkan secara eksplisit — dengan begitu filter Anda akan berfungsi sebagai "daftar diizinkan" untuk output log.

Ekspresi filter berikut menampilkan semua pesan log dengan tingkat prioritas "warning" dan yang lebih tinggi, pada semua tag:

    adb logcat *:W
    

Jika Anda menjalankan logcat dari komputer pengembangan (bukan menjalankannya pada shell adb jarak jauh), Anda juga dapat menetapkan ekspresi filter default dengan mengekspor nilai untuk variabel lingkungan ANDROID_LOG_TAGS:

    export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
    

Perhatikan bahwa filter ANDROID_LOG_TAGS tidak akan diekspor ke instance emulator/perangkat, jika Anda menjalankan logcat dari shell jarak jauh atau menggunakan adb shell logcat.

Mengontrol format output log

Pesan log berisi sejumlah kolom metadata, selain tag dan prioritas. Anda dapat mengubah format output pesan agar menampilkan kolom metadata tertentu. Caranya, gunakan opsi -v dan tetapkan salah satu format output yang didukung yang tercantum di bawah.

  • brief: Menampilkan prioritas, tag, dan PID dari proses yang mengeluarkan pesan.
  • long: Menampilkan semua kolom metadata dan pesan terpisah yang berisi baris kosong.
  • process: Hanya menampilkan PID.
  • raw: Menampilkan pesan log mentah tanpa kolom metadata lainnya.
  • tag: Menampilkan prioritas dan tag saja.
  • thread: Format lama yang menunjukkan prioritas, PID, dan TID dari thread yang mengeluarkan pesan.
  • threadtime (default): Menampilkan tanggal, waktu pemanggilan, prioritas, tag, PID, dan TID dari thread yang mengeluarkan pesan.
  • time: Menampilkan tanggal, waktu pemanggilan, prioritas, tag, dan PID dari proses yang mengeluarkan pesan.

Saat memulai logcat, Anda dapat menentukan format output yang diinginkan dengan menggunakan opsi -v:

    [adb] logcat [-v <format>]
    

Berikut adalah contoh yang menunjukkan cara menghasilkan pesan dalam format output thread:

    adb logcat -v thread
    

Perhatikan bahwa Anda hanya dapat menentukan satu format output dengan opsi -v, tetapi Anda dapat menentukan sebanyak mungkin pengubah yang relevan. Logcat akan mengabaikan pengubah yang tidak relevan.

Pengubah format

Pengubah format mengubah output logcat dalam hal kombinasi dari satu atau beberapa pengubah berikut. Untuk menentukan pengubah format, gunakan opsi -v, seperti berikut:

    adb logcat -b all -v color -d
    

Setiap pesan log Android memiliki tag dan prioritas yang terkait. Anda dapat menggabungkan pengubah format dengan salah satu opsi format berikut: brief, long, process, raw, tag, thread, threadtime, dan time.

Anda dapat memperoleh detail pengubah format dengan mengetik logcat -v --help pada command line.

  • color: Menampilkan setiap tingkat prioritas dengan warna yang berbeda.
  • descriptive: Menampilkan deskripsi peristiwa buffer log. Pengubah ini hanya memengaruhi pesan buffer log peristiwa dan tidak berpengaruh pada buffer non-biner lainnya. Deskripsi peristiwa berasal dari database tag log peristiwa.
  • epoch: Menampilkan waktu dalam detik, mulai dari tanggal 1 Januari 1970.
  • monotonic: Menampilkan waktu dalam detik CPU, dimulai dari booting terakhir.
  • printable: Memastikan bahwa setiap konten logging biner di-escape.
  • uid: Menampilkan UID atau ID Android dari proses yang dicatat, jika diizinkan oleh kontrol akses.
  • usec: Menampilkan waktu dengan presisi hingga mikrodetik.
  • UTC: Menampilkan waktu sebagai UTC.
  • year: Menambahkan tahun ke waktu yang ditampilkan.
  • zone: Menambahkan zona waktu lokal ke waktu yang ditampilkan.

Menampilkan buffer log alternatif

Sistem logging Android mempertahankan beberapa buffer sirkuler untuk pesan log, dan tidak semua pesan log dikirim ke buffer sirkuler default. Untuk melihat pesan log tambahan, Anda dapat menjalankan perintah logcat dengan opsi -b, untuk membuat permintaan menampilkan buffer sirkuler alternatif. Anda bisa menampilkan semua buffer sirkuler alternatif ini:

  • radio: Melihat buffer yang berisi pesan-pesan terkait radio/telepon.
  • events: Menampilkan pesan buffer peristiwa sistem biner yang ditafsirkan.
  • main: Menampilkan buffer log utama (default), tidak memuat pesan log sistem dan error.
  • system: Menampilkan buffer log sistem (default).
  • crash: Menampilkan buffer log error (default).
  • all: Menampilkan semua buffer.
  • default: Melaporkan buffer main, system, dan crash.

Penggunaan opsi -b adalah:

    [adb] logcat [-b <buffer>]
    

Berikut adalah contoh cara menampilkan buffer log yang berisi pesan telepon dan radio:

    adb logcat -b radio
    

Anda juga dapat menentukan beberapa flag -b untuk semua buffer yang ingin dicetak, seperti berikut:

    logcat -b main -b radio -b events
    

Anda dapat menentukan satu flag -b dengan daftar buffer yang dipisahkan koma, misalnya:

    logcat -b main,radio,events
    

Membuat log dari kode

Class Log memungkinkan Anda membuat entri log dalam kode yang ditampilkan dalam alat logcat. Metode logging biasanya meliputi:

Misalnya, menggunakan panggilan berikut:

Kotlin

    Log.i("MyActivity", "MyClass.getView() — get item number $position")
    

Java

    Log.i("MyActivity", "MyClass.getView() — get item number " + position);
    

Output logcat akan menjadi seperti:

    I/MyActivity( 1557): MyClass.getView() — get item number 1