Logcat adalah alat command line yang mengeluarkan log pesan sistem, termasuk
pesan yang telah Anda tulis dari aplikasi dengan
class Log
.
Halaman ini membahas alat command line logcat
, tetapi Anda juga bisa melihat pesan
log dari jendela Logcat pada Android Studio. Untuk
mengetahui informasi cara menampilkan dan memfilter log dari Android Studio,
lihat Menampilkan dan menulis log dengan
Logcat.
Ringkasan sistem logging
Sistem logging Android adalah kumpulan buffer sirkular terstruktur yang dikelola oleh proses
sistem logd
. Kumpulan buffer yang tersedia bersifat tetap dan ditentukan oleh
sistem. Buffering yang paling relevan adalah:
main
: Menyimpan sebagian besar log aplikasi.system
: Menyimpan pesan yang berasal dari Android OS.-
crash
: Menyimpan log error. Setiap entri log memiliki prioritas, tag yang mengidentifikasi asal alog, dan pesan log itu sendiri.
Antarmuka C/C++ utama untuk sistem logging adalah library bersama liblog
dan header-nya <android/log.h>
.
Semua fasilitas logging khusus bahasa
(termasuk android.util.Log
)
pada akhirnya memanggil fungsi
__android_log_write
. Secara default, ini akan memanggil fungsi
__android_log_logd_logger
, yang mengirimkan entri log ke logd
menggunakan socket. Dimulai dengan API level 30, fungsi logging dapat diubah dengan memanggil
__android_set_log_writer
. Informasi selengkapnya tersedia di
Dokumentasi NDK.
Log yang ditampilkan oleh adb logcat
melalui empat tingkat pemfilteran:
- Pemfilteran waktu kompilasi
- Bergantung pada setelan kompilasi, beberapa log mungkin sepenuhnya
dihapus dari sistem biner. Misalnya, ProGuard dapat dikonfigurasi untuk menghapus panggilan ke
Log.d
dari kode Java. - Pemfilteran properti sistem
liblog
mengkueri kumpulan properti sistem untuk menentukan tingkat keparahan minimum yang akan dikirim kelogd
. Jika log Anda memiliki tagMyApp
, properti berikut akan diperiksa, dan diharapkan berisi huruf pertama tingkat keparahan minimum (V
,D
,I
,W
,E
, atauS
untuk menonaktifkan semua log):log.tag.MyApp
persist.log.tag.MyApp
log.tag
persist.log.tag
- Pemfilteran aplikasi
- Jika tidak ada properti yang disetel,
liblog
akan menggunakan prioritas minimum yang disetel oleh__android_log_set_minimum_priority
. Setelan default-nya adalahINFO
. - Pemfilteran tampilan
adb logcat
mendukung filter tambahan yang dapat mengurangi jumlah log yang ditampilkan darilogd
. Lihat bagian tentang memfilter output log untuk detail selengkapnya.
Sintaksis command line
Untuk menjalankan logcat
melalui shell adb
, penggunaan umumnya adalah:
[adb] shell logcat [<option>] ... [<filter-spec>] ...
Ada juga cara pintas untuk adb logcat
, tetapi hanya diperluas ke
adb shell logcat
.
Opsi
logcat
memiliki banyak opsi. Opsi yang tersedia akan bergantung pada versi
OS perangkat yang Anda gunakan. Guna melihat bantuan untuk logcat
khusus
perangkat yang Anda gunakan, jalankan:
adb logcat --help
Perlu diketahui bahwa karena logcat
adalah alat untuk developer OS serta developer aplikasi
(dengan mengharapkan developer aplikasi menggunakan Android Studio), banyak opsi yang hanya
dapat digunakan sebagai root
.
Memfilter output log
Tag pesan log adalah string singkat yang menunjukkan komponen sistem tempat asal pesan tersebut. Misalnya, "View" untuk sistem tampilan.
Prioritasnya adalah salah satu dari nilai karakter berikut, diurutkan dari prioritas terendah ke tertinggi:
V
: Verbose (prioritas terendah)D
: DebugI
: InfoW
: WarningE
: ErrorF
: FatalS
: Silent (prioritas tertinggi, tidak ada apa pun yang dicetak)
Untuk mendapatkan daftar tag yang digunakan dalam sistem dengan prioritas, jalankan
logcat
dan amati dua kolom pertama setiap pesan, yang diberikan sebagai
<priority>/<tag>
.
Berikut adalah contoh output logcat
singkat yang diperoleh dengan
perintah logcat -v brief output
. Output 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, batasi output log menggunakan ekspresi filter. Ekspresi filter memungkinkan Anda menunjukkan kombinasi prioritas tag yang Anda inginkan kepada sistem. Sistem akan menyembunyikan pesan lain untuk menampilkan tag yang ditentukan.
Ekspresi filter mengikuti format tag:priority ...
ini, dengan 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. Sediakan berapa pun spesifikasi tag:priority
dalam
ekspresi filter tunggal. Rangkaian spesifikasi yang dipisahkan spasi kosong.
Berikut adalah contoh ekspresi filter yang menyembunyikan semua pesan log kecuali yang memiliki tag "ActivityManager" dengan prioritas "Info" atau yang lebih tinggi dan pesan log yang memiliki tag "MyApp" dengan prioritas "Debug" atau yang lebih tinggi:
adb logcat ActivityManager:I MyApp:D *:S
Elemen terakhir dalam ekspresi sebelumnya, *:S
, menyetel tingkat prioritas untuk
semua tag ke "silent", yang memastikan bahwa hanya pesan log dengan "ActivityManager" dan "MyApp"
yang ditampilkan. Menggunakan *:S
akan memastikan bahwa output log dibatasi ke
filter yang telah Anda tetapkan secara eksplisit. *:S
memungkinkan filter Anda berfungsi sebagai
daftar yang diizinkan untuk output log.
Catatan: Di beberapa shell, karakter "*
" disediakan oleh shell. Jika Anda
menggunakan shell tersebut, sertakan ekspresi filter dalam tanda kutip: adb logcat
"ActivityManager:I MyApp:D *:S"
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 Anda, bukan menjalankannya di
shell adb
jarak jauh, Anda juga dapat menyetel ekspresi filter default dengan mengekspor nilai untuk
variabel lingkungan ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
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. Untuk melakukannya,
gunakan opsi -v
dan tetapkan salah satu format output yang didukung berikut:
brief
: Menampilkan prioritas, tag, dan PID dari proses yang mengeluarkan pesan.long
: Menampilkan semua kolom metadata dan memisahkan pesan dengan baris kosong.process
: Hanya menampilkan PID.raw
: Menampilkan pesan log mentah tanpa kolom metadata lainnya.tag
: Hanya menampilkan prioritas dan tag.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
, tentukan 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
Anda hanya dapat menentukan satu format output dengan opsi -v
. Namun, Anda
dapat menentukan sebanyak mungkin pengubah yang diperlukan, asalkan pengubah tersebut relevan. logcat
mengabaikan pengubah yang tidak relevan.
Pengubah format
Pengubah format mengubah output logcat
. 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 dengannya. Anda dapat menggabungkan pengubah format dengan salah satu opsi format berikut:
brief
long
process
raw
tag
thread
threadtime
time
Untuk memformat detail pengubah berikut, masukkan logcat -v --help
pada
command line:
color
: Menampilkan setiap tingkat prioritas dengan warna yang berbeda.descriptive
: Menampilkan deskripsi peristiwa buffering log. Pengubah ini hanya memengaruhi pesan buffering log peristiwa dan tidak berpengaruh pada buffering non-biner lainnya. Deskripsi peristiwa berasal dari database tag log peristiwa.epoch
: Menampilkan waktu dalam detik, mulai 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 dalam mikrodetik.UTC
: Menampilkan waktu sebagai UTC.year
: Menambahkan tahun ke waktu yang ditampilkan.zone
: Menambahkan zona waktu lokal ke waktu yang ditampilkan.
Menampilkan buffering log alternatif
Sistem logging Android mempertahankan beberapa buffer sirkular untuk pesan log, dan tidak semua
pesan log dikirim ke buffer sirkular default. Untuk melihat pesan log tambahan,
jalankan perintah logcat
dengan opsi -b
untuk membuat permintaan menampilkan
buffer sirkular alternatif. Anda dapat menampilkan salah satu buffer sirkular alternatif ini:
radio
: Menampilkan buffer yang berisi pesan terkait radio/telepon.events
: Menampilkan pesan buffer peristiwa sistem biner yang ditafsirkan.main
: Menampilkan buffering log utama (default), yang tidak berisi pesan log sistem dan error.system
: Menampilkan buffering log sistem (default).crash
: Menampilkan buffering log error (default).all
: Menampilkan semua buffering.default
: Melaporkan buffermain
,system
, dancrash
.
Penggunaan opsi -b
adalah:
[adb] logcat [-b <buffer>]
Berikut adalah contoh cara melihat buffer log yang berisi pesan telepon dan radio:
adb logcat -b radio
Untuk menentukan beberapa flag -b
bagi semua buffering yang ingin Anda cetak,
masukkan parameter berikut:
logcat -b main -b radio -b events
Tentukan 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 di alat logcat
. Metode logging biasanya meliputi:
Log.v(String, String)
(verbose)Log.d(String, String)
(debug)Log.i(String, String)
(information/informasi)Log.w(String, String)
(warning/peringatan)Log.e(String, String)
(error)
Misalnya, menggunakan panggilan berikut:
Kotlin
Log.i("MyActivity", "MyClass.getView() — get item number $position")
Java
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
logcat
menghasilkan output yang mirip dengan berikut ini:
I/MyActivity( 1557): MyClass.getView() — get item number 1