Logcat memungkinkan pemfilteran log tetapi berfungsi seperti itu: Anda menentukan filter dan logcat hanya menampilkan pesan yang cocok dengan filter. Tetapi apakah ada cara untuk menampilkan semua log KECUALI beberapa TAG yang ditentukan oleh filter?
123
Jawaban:
Jika Anda menggunakan,
adb logcat
Anda dapat menyalurkannya melalui grep dan menggunakan pencocokan terbalik: Dari halaman manual grep :Sebagai contoh:
Anda dapat memperluas ini dengan menggunakan ekspresi reguler .
Berikut adalah contoh ekspresi seperti itu:
Yang ini akan memeriksa salah satu yang diberikan untuk terjadi, grep tidak akan mencantumkannya.
sumber
grep
adalah perintah unix standar. Untuk Windows Anda dapat mencobafind /V "notshownmatchpattern"
. PS Ternyata, shell adb juga memiliki filegrep
. Tapi itu tidak sama dengan unix standargrep
!Anda dapat melakukan ini dari dalam DDMS Monitor (dan juga Eclipse atau Android Studio) dengan kotak input ekspresi reguler dan pernyataan pandangan ke depan negatif , misalnya saya mengecualikan banyak noise dari log saya dengan yang berikut ini:
("Tag:" bukan bagian dari ekspresi reguler, tetapi memberi tahu LogCat untuk hanya menerapkan regex ke bidang Tag. Jika Anda menggunakan trik ini dalam filter yang disimpan, letakkan hanya ekspresi reguler di kotak masukan "Tag" , dan hilangkan awalan "tag:")
Di panel monitor logcat Android Studio, Anda dapat menyiapkan filter yang disimpan untuk ini dengan membuka drop-down di kanan atas (mungkin "Tampilkan hanya aplikasi yang dipilih" dipilih) dan memilih Edit Filter Configuration. Buat filter logcat baru dan letakkan
^(?!(WifiMulticast
... dll.))
di kotak Tag Log, denganRegex
kotak centang dicentang.sumber
Jika Anda ingin mengecualikan atau memfilter pesan tertentu berdasarkan nama tag di Android studio, buka jendela LogCat => Edit konfigurasi Filter, dan masukkan yang berikut di bawah "menurut Tag Log (regex):"
Perhatikan bahwa tidak ada spasi, ini penting
sumber
^(?!tag1)
^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Ini akan mengecualikan teks yang memiliki konten WindowManager, dalvik, ...
tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
Ini akan mengecualikan tag WindowManager, dalvik, ... dari logcat
sumber
^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Dari shell, Anda dapat menggunakan perintah seperti:
yang akan menyertakan semua log selain yang memiliki tag
AlarmManagerService
danPowerManagerService
.(
:S
Singkatan dari "silent", yang berarti tidak ada yang akan dicetak untuk tag tersebut;:V
singkatan dari "verbose" yang berarti semuanya akan dicetak untuk semua tag lainnya. Dokumentasi Android untuk logcat memiliki detail lebih lanjut tentang opsi lain yang dapat Anda gunakan di filter.)Anda juga dapat menggunakan
ANDROID_LOG_TAGS
variabel lingkungan untuk menyiapkan filter default, misalnya (dalam bash):sumber
S
itu untuk 'diam'. Saya telah memperbarui jawaban untuk menjelaskan ini, seperti yang Anda sarankan.Gabungkan pandangan positif dan negatif untuk penyaringan yang lebih kuat.
Contoh:
Tag dalam tanda kurung bersarang pertama disertakan.
Tag di detik dikecualikan.
sumber
Berikut daftar filter yang telah saya gunakan untuk mengabaikan log sistem Samsung . akan bekerja dengan perangkat lain juga.
sumber
Cara mudah untuk melakukannya adalah dengan hanya memfilter tag yang ingin Anda lihat.
Hanya akan memunculkan tag tersebut.
sumber
Dalam tampilan Eclipse Logcat tidak ada opsi seperti itu. Namun Anda dapat menggunakan level log untuk mengecualikan pesan yang level log-nya terlalu rendah. E. g. mengaturnya ke I (nfo) tidak menampilkan pesan D (ebug) dan (V) erbose.
sumber