127 votes

Comment exclure certains messages par nom de TAG en utilisant Android adb logcat ?

Logcat permet de filtrer les logs mais cela fonctionne comme ça : Vous définissez des filtres et Logcat n'affiche que les messages qui correspondent aux filtres. Mais existe-t-il un moyen d'afficher tous les logs SAUF certains TAGs définis par les filtres ?

1 votes

221voto

ZoFreX Points 3946

Vous pouvez le faire à partir de DDMS Monitor (et aussi d'Eclipse ou d'Android Studio) avec la boîte de saisie de l'expression régulière et assertions négatives de type look-ahead Par exemple, j'exclue beaucoup de bruit de mon journal avec ce qui suit :

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 simplement l'expression régulière dans le champ de saisie "Tag" et omettez le préfixe "tag :".)

Dans le volet du moniteur logcat d'Android Studio, vous pouvez configurer un filtre enregistré à cet effet 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 Tag Log, avec l'option Regex cochée.

0 votes

Bonne solution pour Eclipse LogCat

6 votes

Ma vision est immédiatement moins floue ! :D

0 votes

C'est ce que je cherche depuis un certain temps.

53voto

chris polzer Points 1286

Si vous utilisez adb logcat vous pouvez le faire passer par grep et utiliser la correspondance inversée : De la grep manpage :

v, --inverser la correspondance Inverse le sens de la correspondance, pour sélectionner les lignes non correspondantes.

Par exemple :

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

Vous pouvez l'étendre en utilisant expressions régulières .

Voici un exemple d'une telle expression :

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

Celui-ci vérifiera si l'un ou l'autre des éléments donnés se produit, grep ne les listera pas.

1 votes

@zest grep est une commande unix standard. Pour Windows, vous pouvez essayer find /V "notshownmatchpattern" . P.S. Apparemment, le shell adb a aussi un grep . Mais ce n'est pas la même chose que le standard unix grep !

0 votes

Ouais, je l'ai déjà trouvé, findstr - suck, possible d'installer powershell ou grep (pour Windows :), la même chose que Linux comme il a été écrit dans readme, mais pas tellement en pratique)

0 votes

Non, j'aimerais simplement conseiller à Windows d'installer git avec les outils de la ligne de commande de git. Cela installerait tous les outils de base de la ligne de commande Unix pour Windows.

39voto

Rich Points 1685

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 qui ont l'attribut AlarmManagerService y PowerManagerService tags.

(Le :S signifie "silencieux", ce qui signifie que rien ne sera imprimé pour ces balises ; l'option :V signifie "verbeux", ce qui signifie que tout sera imprimé pour toutes les autres balises. Le site Documentation Android pour logcat a plus de détails sur les autres options que vous pouvez utiliser dans les filtres).

Vous pouvez également utiliser le ANDROID_LOG_TAGS variable d'environnement pour configurer les filtres par défaut, par exemple (dans bash) :

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

0 votes

C'est une bonne suggestion et cela fonctionne à partir de la ligne de commande sans pipelines. Vous devriez mettre à jour votre réponse pour expliquer que la partie ":S" va seulement émettre 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 celle-ci...

1 votes

@ChrisMarkle D'après les documents, les S est pour "silencieux". J'ai mis à jour la réponse pour expliquer cela, comme vous le suggérez.

2 votes

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 qu'elle soit toujours activée pour exclure certains des processus les plus polluants.

39voto

Rino Points 185

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

Ceci exclura les textes ayant pour contenu WindowManager,dalvik,...

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

Ceci exclura les tags WindowManager, dalvik,... de logcat.

0 votes

Un peu plus : ^(?!(WifiMulticast|WifiHW|MtpService|PushClient|EGL_emulatio‌​n|OpenGl*|InputReade‌​r|art|dalvik|Environ‌​ment|DataRouter|Alar‌​mManager|WindowManag‌​er|PhoneStatusBar|Ac‌​tivityManager|Resour‌​ceType|PackageManage‌​r|gralloc*))

0 votes

Et plus encore : (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|Connectivity|VelvetNetworkClient|WorkerManager|EGL_emulation|chatty|gralloc|InputReader|ActivityThread|ActivityTaskManager|UsageStatsService|ocess. gservice|DropBoxManagerService|EventLogChimeraService|PContextMetricsRunner))

0voto

Lars Blumberg Points 1530

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

0 votes

J'ai oublié de mentionner que je l'utilise sur l'invite de commande / dans un téléphone pour lire les journaux. Et chaque fois que je touche un écran, il affiche des messages InputReader / InputDispatcher qui inondent l'écran. Maintenant, je vois que le réglage des filtres sur "InputReader:S InputDispatcher:S" fonctionne également :) Merci pour la réponse !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X