Come escludere determinati messaggi in base al nome TAG utilizzando Android adb logcat?


Risposte:


52

Se lo stai usando, adb logcatpuoi reindirizzarlo attraverso grep e usare la sua corrispondenza invertita: Dalla pagina di manuale di grep :

v, --invert-match Inverte il senso della corrispondenza, per selezionare le linee non corrispondenti.

Per esempio:

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

Puoi estenderlo usando espressioni regolari .

Ecco un esempio di tale espressione:

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

Questo verifica che si verifichi uno dei dati, grep non li elenca.


1
@zest grepè un comando unix standard. Per Windows puoi provare find /V "notshownmatchpattern". PS Apparentemente, la shell adb ha anche un file grep. Ma non è lo stesso dell'unix standard grep!
PCoder

Sì, l'ho già trovato, findstr - suck, possibile installare powershell o grep (per Windows :), lo stesso di Linux come è stato scritto in readme, ma non così tanto in pratica)
Gennadiy Ryabkin

Nessun giorno, vorrei solo consentire a Windows di installare git con gli strumenti a riga di comando di git. Questo installerebbe tutti gli strumenti di base della riga di comando di Unix per windowze.
chris polzer

o installa clink per strumenti comuni della riga di comando di Unix su windowze
chris polzer

@PCoder puoi scrivere l'intero comando per fare lo stesso con Windows CMD?
Raghav Satyadev

217

Puoi farlo da DDMS Monitor (e anche Eclipse o Android Studio) con la casella di input dell'espressione regolare e le asserzioni anticipate negative , ad esempio sto escludendo molto rumore dal mio registro con quanto segue:

tag:^(?!(WifiMulticast|WifiHW|MtpService|PushClient))

(Il "tag:" non fa parte dell'espressione regolare, ma dice a LogCat di applicare la regex solo al campo Tag. Se utilizzi questo trucco in un filtro salvato, inserisci solo l'espressione regolare nella casella di input "Tag" e ometti il ​​prefisso "tag:")

Nel pannello di monitoraggio logcat di Android Studio, puoi impostare un filtro salvato per questo aprendo il menu a discesa in alto a destra (potrebbe avere selezionato "Mostra solo applicazione selezionata") e selezionando Modifica configurazione filtro. Crea un nuovo filtro logcat e metti ^(?!(WifiMulticast... ecc. ))nella casella Log Tag, con la Regexcasella di controllo selezionata.


Buona soluzione per Eclipse LogCat
Seraphim's

6
La mia vista è immediatamente meno sfocata! : D
suomi35

Questo è quello che cerco da un po 'di tempo
ar-g

Ha funzionato come un fascino! Grazie molto. Aggiungi anche la parola "dalvikvm". È più fastidioso in logcat.
Atul

1
Risposta con filtraggio logcat è quella corretta - stackoverflow.com/a/17468665/828237
kwesolowski

74

Se desideri escludere o filtrare determinati messaggi in base al nome del tag in Android Studio, vai alla finestra LogCat => Modifica configurazione filtro e inserisci quanto segue in "per tag di log (regex):"

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

Nota che non ci sono spazi, questo è importante


questa risposta funziona in logcat> Modifica configurazione filtro di intellij 15 che fa apparire un modale intitolato "Crea nuovo filtro Logcat".
petey

1
Grazie. A proposito, i telefoni Lenovo hanno molti messaggi di registro spam
Seagull

Ciò impedisce solo che i log con quel tag vengano visualizzati nel log. Il monitor viene ancora sommerso da quelle chiamate in background e spinge le chiamate non "tag1 | tag2 | etc" fuori dal buffer. C'è un modo per aggirare questo?
TheBestBigAl

Risposta con filtraggio logcat è quella corretta - stackoverflow.com/a/17468665/828237
kwesolowski

O se un tag^(?!tag1)
Vlad

34

^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

Questo escluderà i testi con contenuti WindowManager, dalvik, ...

tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$

Questo escluderà i tag WindowManager, dalvik, ... da logcat


Qualche altro:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Gurupad Mamadapur

E altro ancora: (Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | system_server | StrictMonode | bluetooth | Rete BroadcastQueue | ConnextivityService | Wakelock | HttpClientWrapper | RAWR | Tenore | BgTask | WifiService | BluetoothAdapter | UpdateStatsService | AppIdleHistory | Connettività | VelvetNetworkClient | WorkerManager | EGL_emulation | loquace | gralloc | InputReader | ActivityThread | ActivityTaskManager | UsageStatsService | ocess.gservice | DropBoxManagerService | EventLogChimeraService | PContextMetricsRunner))
Graeme

32

Dalla shell, puoi usare un comando come:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

che includerà tutti i registri tranne quelli con i tag AlarmManagerServicee PowerManagerService.

(L' :Sacronimo "silenzioso", che significa che non verrà stampato nulla per quei tag; l' :Vacronimo di "verbose" che significa che tutto verrà stampato per tutti gli altri tag. La documentazione di Android per logcat ha più dettagli di altre opzioni che puoi usare in i filtri.)

Puoi anche usare la ANDROID_LOG_TAGSvariabile d'ambiente per impostare filtri predefiniti, ad esempio (in bash):

export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"

Questo è un buon suggerimento e funziona dalla riga di comando senza pipeline. Dovresti aggiornare la tua risposta imho per spiegare che la parte ": S" emetterà solo messaggi Severe per i componenti nominati (cosa che non accade quasi mai). Ancora una volta, buona risposta. La gente dovrebbe votare per questo ...
Chris Markle

1
@ChrisMarkle Secondo i documenti, Ssignifica "silenzioso". Tuttavia, ho aggiornato la risposta per spiegarlo, come suggerisci.
Rich

2
Puoi filtrare l'output di logcat allo stesso modo utilizzando la variabile d'ambiente ANDROID_LOG_TAGS. Trovo utile averlo sempre impostato per escludere alcuni dei processi più contenenti spam.
emidander

16

Combina lookahead positivo e negativo per un filtraggio più potente.

Esempio:

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

I tag nelle prime parentesi nidificate sono inclusi.

I tag al secondo sono esclusi.


IMHO, questo è un modo più completo per filtrare i log.
Ritesh Gune

4

Ecco un elenco di filtri che ho utilizzato per ignorare i registri di sistema Samsung . funzionerebbe anche con altri dispositivi.

Logcat -> Modifica configurazione filtro -> Tag di registro

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

Un modo semplice per farlo è semplicemente filtrando solo i tag che vuoi vedere.

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

Visualizzerà solo quei tag.


0

All'interno della visualizzazione Eclipse Logcat non esiste tale opzione. Tuttavia è possibile utilizzare il livello di registro per escludere qualsiasi messaggio il cui livello di registro è troppo basso. Per esempio. impostandolo su I (nfo) non vengono visualizzati i messaggi D (ebug) e (V) erbose.


Beh, ho dimenticato di dire che lo sto usando al prompt dei comandi / all'interno di un telefono per leggere i registri. E ogni volta che tocco uno schermo mostra i messaggi InputReader / InputDispatcher che stanno solo inondando lo schermo. Ora vedo anche l'impostazione dei filtri su "InputReader: S InputDispatcher: S" funziona :) Grazie per la risposta!
Kostas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.