Bagaimana cara mengecualikan pesan tertentu dengan nama TAG menggunakan Android adb logcat?

Jawaban:

52

Jika Anda menggunakan, adb logcatAnda dapat menyalurkannya melalui grep dan menggunakan pencocokan terbalik: Dari halaman manual grep :

v, --invert-match Balikkan arti pencocokan, untuk memilih baris yang tidak cocok.

Sebagai contoh:

$adb logcat | grep --invert-match 'notshownmatchpattern' 

Anda dapat memperluas ini dengan menggunakan ekspresi reguler .

Berikut adalah contoh ekspresi seperti itu:

"/^(?:emails|tags|addresses)"

Yang ini akan memeriksa salah satu yang diberikan untuk terjadi, grep tidak akan mencantumkannya.

chris polzer
sumber
1
@zest grepadalah perintah unix standar. Untuk Windows Anda dapat mencoba find /V "notshownmatchpattern". PS Ternyata, shell adb juga memiliki file grep. Tapi itu tidak sama dengan unix standar grep!
PCoder
Ya, saya sudah menemukannya, findstr - suck, mungkin untuk menginstal PowerShell atau grep (untuk windows :), sama seperti Linux seperti yang saya tulis di readme, tapi tidak begitu banyak dalam prakteknya)
Gennadiy Ryabkin
Tidak ada hari lagi, saya hanya menyarankan agar windows menginstal git dengan alat baris perintah git. Ini akan menginstal semua alat baris perintah unix dasar untuk windowze.
chris polzer
atau instal klink untuk alat baris perintah unix umum di windowze
chris polzer
@PCoder Bisakah Anda menulis seluruh perintah untuk melakukan hal yang sama dengan windows CMD?
Raghav Satyadev
217

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:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))

("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, dengan Regexkotak centang dicentang.

ZoFreX
sumber
Solusi yang baik untuk Eclipse LogCat
Seraphim
6
Pengelihatan saya langsung berkurang buram! : D
suomi35
Ini yang saya cari cukup lama
ar-g
Bekerja seperti pesona! Terimakasih banyak. Tambahkan juga kata "dalvikvm" di dalamnya. Paling mengganggu di logcat.
Atul
1
Jawaban dengan pemfilteran logcat adalah yang tepat - stackoverflow.com/a/17468665/828237
kwesolowski
74

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):"

^(?!(tag1|tag2|tag3|tag4))

Perhatikan bahwa tidak ada spasi, ini penting

Phileo99
sumber
jawaban ini bekerja di logcat> Edit Filter Configuration yang menampilkan modal berjudul, "Buat Filter Logcat Baru".
petey
1
Terima kasih. Ponsel Lenovo Btw memiliki banyak pesan log spam
Seagull
Ini hanya mencegah log dengan tag itu dirender ke log. Monitor masih dibanjiri dengan panggilan tersebut di latar belakang dan mendorong panggilan non "tag1 | tag2 | etc" keluar dari buffer. Apakah ada jalan keluarnya?
TheBestBigAl
Jawaban dengan pemfilteran logcat adalah yang tepat - stackoverflow.com/a/17468665/828237
kwesolowski
Atau jika satu tag^(?!tag1)
Vlad
34

^(?!.*(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

Rino
sumber
Beberapa lagi:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Gurupad Mamadapur
Dan lainnya: (Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | system_server | StrictMode | bluetooth | NetworkMonitor | FA | BroadcastQueue | ConnextivityService | WakeLock | HttpClientWrapper | RAWR | Tenor | BgTask | WifiService | BluetoothAdapter | UpdateStatsService | AppIdleHistory | Konektivitas | VelvetNetworkClient | WorkerManager | EGL_emulation | KotakSktivitasBervice | LayananPenggunaan PContextMetricsRunner))
Graeme
32

Dari shell, Anda dapat menggunakan perintah seperti:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

yang akan menyertakan semua log selain yang memiliki tag AlarmManagerServicedan PowerManagerService.

( :SSingkatan dari "silent", yang berarti tidak ada yang akan dicetak untuk tag tersebut; :Vsingkatan 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_TAGSvariabel lingkungan untuk menyiapkan filter default, misalnya (dalam bash):

export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"
Kaya
sumber
Ini adalah saran yang bagus dan berfungsi dari baris perintah tanpa pipeline. Anda harus memperbarui jawaban Anda untuk menjelaskan bahwa bagian ": S" hanya akan memancarkan pesan Parah untuk komponen bernama (yang hampir tidak pernah terjadi). Sekali lagi, jawaban yang bagus. Orang harus memilih yang ini ...
Chris Markle
1
@ChrisMarkle Menurut dokumen Situ untuk 'diam'. Saya telah memperbarui jawaban untuk menjelaskan ini, seperti yang Anda sarankan.
Kaya
2
Anda dapat memfilter keluaran logcat dengan cara yang sama menggunakan variabel lingkungan ANDROID_LOG_TAGS. Saya merasa berguna untuk selalu menyetelnya untuk mengecualikan beberapa proses yang lebih berisi spam.
emidander
16

Gabungkan pandangan positif dan negatif untuk penyaringan yang lebih kuat.

Contoh:

(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))

Tag dalam tanda kurung bersarang pertama disertakan.

Tag di detik dikecualikan.

Tukang roti
sumber
IMHO, Ini adalah cara yang lebih komprehensif untuk memfilter log.
Ritesh Gune
4

Berikut daftar filter yang telah saya gunakan untuk mengabaikan log sistem Samsung . akan bekerja dengan perangkat lain juga.

Logcat -> Edit Konfigurasi Filter -> Tag Log

^(?!(PowerUI|PowerPlanningReceiver|BatteryService|SamsungPhoneWindowManager|MotionRecognitionService|AudioService|APM_AudioPolicyManager|SensorService|StorageManager|SignalClusterView|BatteryService|TelephonyManager|UsbDeviceManager|KeyguardUpdateMonitor|BatteryController|ActivityManager|LauncherAppsService|AppsModel|DataLoader|PackageManager|LauncherApps|ContactsImsCommon|ImsUtil|ImsSettingsProvider|DeviceConfigManager|WifiService|BackupManagerService|PersonaManagerService|DefaultDialerManager|ResourceType|NetworkUIGlobals|NetworkProxy|FileWriteThread|ReflectUtil|PhoneApp|SamsungAlarmManager|display|DeviceStorageMonitorService|wrapperGPS|io_stats|GnssLocationProvider|KeyguardServiceBoxContainer|ConnectivityService|SSRM|TLC_TIMA_PKM_initialize|mc_tlc_communication|TeeDriverClient|TLC_TIMA_PKM_measure_kernel|AutomaticBrightnessController|BatteryUtils|WifiConnectivityManager|Launcher|IconView|ApplicationPackageManager|LiveIconLoader|WifiScanningService|WifiHAL|WifiScanController|ApplicationPolicy|SELinux|TimaKeyStoreProvider|ActivityThread|zygote|GservicesProvider|GoogleHttpClient|cr_ChildProcessConnect|WificondControl|Netd|Tethering|ContactsImsCommon|ImsConstants|tnet-jni|BatteryStatsService|SignalClusterView|LiveIconManager|BitmapCacheContainer|com.samsung.android.app.powerplanning.utils.BatteryUtils|ReflectField|cr_ChildConnAllocator|TinLoadingFailTracker|WifiPermissionsUtil|EventHandler_FLP|android.hardware.wifi@1.0-service|BluetoothAdapter|bt_btm|WifiPermissionsUtil|GeofencerStateMachine|Places|GCoreUlr|BeaconBle|Sensors|SLocation|ContactsProvider_EventLog|WificondScannerImpl|AlarmManager|AlarmManagerEXT|MultiDex|NetworkSecurityConfig|DnsProxyListener|dalvik-internals|mobileconfig|SsacManager|ImsPhoneStateManager|VolteServiceModule|PdnController|PowerManagerService|GameManagerService|NoSync|SensorManager|DisplayPowerController|NetworkController|SamsungAnalytics111040|tlcFidoAuthnr|InputReader|FlashlightController|KeyguardWallpaperController|OpenGLRenderer|EasyMuteController|Vibrator|VibratorService|PowerManagerUtil|LightsService|WindowManager|InputDispatcher|InputReader|CustomFrequencyManagerService|SystemUIAnalytics|SamsungAnalytics|swipe|PanelView|BadgeCache|MARsPolicyManager|MARsDBManager|KeyguardClockPage|ScanManager|RegiMgrBase|secImsManager|GeolocationController|MultiSimUtils|CarrierText|Mms|NetworkNotificationUI2|CommandListener|ReschedulableTimer|RCS-ContactsImsCommon|Settings|DmConfigModule|NotificationMgr2|PhoneMultiSimUtils|PhoneProxy|VideoCapabilities|AudioCapabilities|SAIV_FACE|FaceController|FaceService|SamsungAnimationCreator|ImageWallpaper|Finsky|VirtualScreen|PagedView|DragLayer|HomeContainer|ImsServiceStub|DmConfigHelper|TZ))
Ramesh Jaya
sumber
1

Cara mudah untuk melakukannya adalah dengan hanya memfilter tag yang ingin Anda lihat.

adb logcat -s "Tag1" -s "Tag2" -s "Tag3"

Hanya akan memunculkan tag tersebut.

Wintermute
sumber
0

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.

Lars Blumberg
sumber
Yah saya lupa menyebutkan bahwa saya menggunakannya pada command prompt / di dalam telepon untuk membaca log. Dan setiap kali saya mengetuk layar, itu menunjukkan pesan InputReader / InputDispatcher yang hanya membanjiri layar. Sekarang saya juga melihat pengaturan filter ke "InputReader: S InputDispatcher: S" berfungsi :) Terima kasih atas jawabannya!
Kostas