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.


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.


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


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


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"

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.


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

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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.