Comment exclure certains messages par nom de TAG à l'aide d'Android adb logcat?

Réponses:

52

Si vous utilisez, adb logcatvous pouvez le faire passer par grep et utiliser sa correspondance inversée: Depuis la page de manuel grep :

v, --invert-match Inverse le sens de la correspondance, pour sélectionner les lignes qui ne correspondent pas.

Par exemple:

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

Vous pouvez étendre cela en utilisant des expressions régulières .

Voici un exemple d'une telle expression:

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

Celui-ci vérifierait si l'un ou l'autre des éléments donnés se produisait, grep ne les listerait alors pas.

Chris Polzer
la source
1
@zest grepest une commande unix standard. Pour Windows, vous pouvez essayer find /V "notshownmatchpattern". PS Apparemment, le shell adb a également un grep. Mais ce n'est pas la même chose que l'unix standard grep!
PCoder
Ouais, je l'ai déjà trouvé, findstr - suck, possible d'installer powershell ou grep (pour windows :), le même que Linux comme cela a été écrit dans readme, mais pas tellement dans la pratique)
Gennadiy Ryabkin
Pas de problème, je voudrais simplement que Windows installe git avec les outils de ligne de commande git. Cela installerait tous les outils de base de la ligne de commande Unix pour windowze.
chris polzer
ou installez clink pour les outils de ligne de commande UNIX courants sur windowze
chris polzer
@PCoder pouvez-vous s'il vous plaît écrire une commande entière pour faire la même chose avec Windows CMD?
Raghav Satyadev
217

Vous pouvez le faire à partir de DDMS Monitor (et également Eclipse ou Android Studio) avec la zone de saisie d'expression régulière et les assertions d'anticipation négatives , par exemple, j'exclus beaucoup de bruit de mon journal avec les éléments suivants:

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

(Le "tag:" ne fait pas partie de l'expression régulière, mais indique à LogCat de n'appliquer l'expression régulière qu'au champ Tag. Si vous utilisez cette astuce dans un filtre enregistré, mettez uniquement l'expression régulière dans la zone de saisie "Tag" , et omettez le préfixe "tag:")

Dans le volet du moniteur logcat d'Android Studio, vous pouvez configurer un filtre enregistré pour cela en ouvrant la liste déroulante en haut à droite (il se peut que l'option "Afficher uniquement l'application sélectionnée" soit sélectionnée) et en sélectionnant Modifier la configuration du filtre. Créez un nouveau filtre logcat et mettez ^(?!(WifiMulticast... etc. ))dans la case Log Tag, avec la Regexcase cochée.

ZoFreX
la source
Bonne solution pour Eclipse LogCat
Seraphim's
6
Ma vision est tout de suite moins floue! : D
suomi35
C'est ce que je recherche depuis un bon moment
ar-g
A travaillé comme du charme! Merci beaucoup. Ajoutez également le mot "dalvikvm". C'est le plus ennuyeux dans logcat.
Atul le
1
La réponse avec le filtrage logcat est la bonne - stackoverflow.com/a/17468665/828237
kwesolowski
74

Si vous souhaitez exclure ou filtrer certains messages par nom de balise dans le studio Android, accédez à la fenêtre LogCat => Modifier la configuration du filtre, et entrez ce qui suit sous "par balise de journal (regex):"

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

Notez qu'il n'y a pas d'espaces, c'est important

Phileo99
la source
cette réponse fonctionne dans logcat> Edit Filter Configuration de intellij 15 qui fait apparaître un modal intitulé "Create New Logcat Filter".
petey
1
Je vous remercie. Les téléphones Lenovo Btw ont beaucoup de messages de spam
Seagull
Cela empêche uniquement les journaux avec cette balise d'être rendus dans le journal. Le moniteur est toujours submergé par ces appels en arrière-plan et il pousse les appels non "tag1 | tag2 | etc" hors du tampon. Y a-t-il un moyen de contourner cela?
TheBestBigAl
La réponse avec le filtrage logcat est la bonne - stackoverflow.com/a/17468665/828237
kwesolowski
Ou si un tag^(?!tag1)
Vlad
34

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

Cela exclura les textes ayant des contenus WindowManager, dalvik, ...

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

Cela exclura les balises WindowManager, dalvik, ... de logcat

Rino
la source
Un peu plus:^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulation|OpenGl*|InputReader|art|dalvik|Environment|DataRouter|AlarmManager|WindowManager|PhoneStatusBar|ActivityManager|ResourceType|PackageManager|gralloc*))
Gurupad Mamadapur
Et plus: (Gnss | NetRec | ResolverController | GAv4 | AsyncOperation | AppOps | WificondControl | aofp | wifi | netmgr | ctxmgr | BestClock | FirebaseInstanceId | android.os.Debug | memtrack | netd | serveur_réseau | FAictMode | bletooth | BroadcastQueue | ConnextivityService | WakeLock | HttpClientWrapper | RAWR | Tenor | BgTask | WifiService | BluetoothAdapter | UpdateStatsService | AppIdleHistory | Connectivité | VelvetNetworkClient | WorkerManager | EGL_emulation | chatty. PContextMetricsRunner))
Graeme
32

Depuis le shell, vous pouvez utiliser une commande comme:

adb logcat AlarmManagerService:S PowerManagerService:S *:V

qui inclura tous les journaux à l'exception de ceux avec les balises AlarmManagerServiceet PowerManagerService.

(L' :Sabréviation de "silent", ce qui signifie que rien ne sera imprimé pour ces balises; l' :Vacronyme de "verbose" qui signifie que tout sera imprimé pour toutes les autres balises. La documentation Android pour logcat contient plus de détails sur les autres options que vous pouvez utiliser dans les filtres.)

Vous pouvez également utiliser la ANDROID_LOG_TAGSvariable d'environnement pour configurer des filtres par défaut, par exemple (dans bash):

export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"
Riches
la source
Ceci est une bonne suggestion et fonctionne à partir de la ligne de commande sans pipelines. Vous devriez mettre à jour votre réponse à mon humble avis pour expliquer que la partie ": S" n'émettra que des messages sévères pour les composants nommés (ce qui n'arrive presque jamais). Encore une fois, bonne réponse. Les gens devraient voter pour celui-ci ...
Chris Markle
1
@ChrisMarkle Selon la documentation, Sc'est pour «silencieux». J'ai mis à jour la réponse pour expliquer cela, comme vous le suggérez.
Rich
2
Vous pouvez filtrer la sortie de logcat de la même manière en utilisant la variable d'environnement ANDROID_LOG_TAGS. Je trouve utile de toujours le configurer pour exclure certains des processus les plus spammeurs.
emidander
16

Combinez les anticipations positives et négatives pour un filtrage plus puissant.

Exemple:

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

Les balises dans les premières parenthèses imbriquées sont incluses.

Les balises en seconde sont exclues.

boulanger
la source
À mon humble avis, c'est un moyen plus complet de filtrer les journaux.
Ritesh Gune
4

Voici une liste de filtres que j'ai utilisés pour ignorer les journaux système Samsung . fonctionnerait également avec d'autres appareils.

Logcat -> Modifier la configuration du filtre -> Balise de journal

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

Un moyen simple de le faire est de filtrer simplement les balises que vous souhaitez voir.

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

Ne fera apparaître que ces balises.

Wintermute
la source
0

Dans la vue Eclipse Logcat, il n'y a pas une telle option. Cependant, vous pouvez utiliser le niveau de journalisation pour exclure tout message dont le niveau de journalisation est trop bas. Par exemple. le régler sur I (nfo) n'affiche pas les messages D (ebug) et (V) erbose.

Lars Blumberg
la source
Eh bien, j'ai oublié de mentionner que j'utilise cela à l'invite de commande / à l'intérieur d'un téléphone pour lire les journaux. Et chaque fois que je touche un écran, il affiche des messages InputReader / InputDispatcher qui ne font qu'inonder l'écran. Maintenant, je vois également la configuration des filtres sur "InputReader: S InputDispatcher: S" fonctionne :) Merci pour une réponse!
Kostas