Comment exclure certains messages par le nom D'étiquette en utilisant ADB logcat Android?
Logcat permet de filtrer les journaux, mais cela fonctionne comme cela: vous définissez les filtres et logcat affiche seulement les messages qui correspondent aux filtres. Mais y a-t-il un moyen d'afficher tous les logs à L'exception de quelques TAGs définis par des filtres?
8 réponses
si vous utilisez adb logcat
vous pouvez le pipe à travers grep et utiliser il est inversé correspondant:
Du grep manpage :
v, --invert-match Inverser le sens de l'appariement, pour sélectionner les lignes non-appariées.
par exemple:
$adb logcat | grep --invert-match 'notshownmatchpattern'
vous pouvez étendre cela en utilisant expressions régulières .
Voici exemple d'une telle expression:
"/^(?:emails|tags|addresses)"
celui-ci vérifierait que l'un ou l'autre des cas donnés se produisent, grep ne les énumérerait alors pas.
vous pouvez le faire à partir de DDMS Monitor (et aussi Eclipse ou Android Studio) avec la boîte de saisie de l'expression régulière et déclarations d'anticipation négative , par exemple, j'exclus 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 dit LogCat de n'appliquer que la regex à la Balise de champ. Si vous utilisez cette astuce dans un filtre enregistrée puis mettez juste l'expression régulière dans le "Tag" zone de saisie, et d'omettre le "tag:" prefix)
dans le volet moniteur logcat D'Android Studio, vous pouvez configurer un filtre sauvegardé en ouvrant le menu déroulant en haut à droite (il peut avoir sélectionné" Afficher seulement l'application sélectionnée") et en sélectionnant Modifier la Configuration du filtre. Créer un nouveau filtre logcat et mettre ^(?!(WifiMulticast
...etc. ))
dans la case du journal de bord, la case Regex
étant cochée.
si vous voulez exclure ou filtrer certains messages par le nom de la balise dans Android studio, allez dans la fenêtre LogCat = > modifier la configuration du filtre, et entrez ce qui suit sous "by Log Tag (regex): "
^(?!(tag1|tag2|tag3|tag4))
Notez qu'il n'y a pas d'espaces, c'est important
^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
ceci exclura les textes ayant des contenus WindowManager, dalvik,...
tag:^(?!.*(WindowManager|dalvik|Environment|DataRouter|AlarmManager)).*$
ceci exclura tags WindowManager, dalvik,... de logcat
depuis le shell, vous pouvez utiliser une commande comme:
adb logcat AlarmManagerService:S PowerManagerService:S *:V
qui inclura toutes les grumes à l'exception de celles portant les étiquettes AlarmManagerService
et PowerManagerService
.
(le :S
signifie "silencieux", ce qui signifie que rien ne sera imprimé pour ces étiquettes; le :V
signifie "verbeux", ce qui signifie que tout sera imprimé pour toutes les autres étiquettes. La documentation Android pour logcat a plus de détails de d'autres options que vous pouvez utiliser dans les filtres.)
vous pouvez également utiliser la variable d'environnement ANDROID_LOG_TAGS
pour configurer les filtres par défaut, par exemple (en bash):
export ANDROID_LOG_TAGS="AlarmManagerService:S PowerManagerService:S *:V"
Combine les lookahead positif et négatif pour un filtrage plus puissant.
exemple:
(?=(AndroidRuntime|Main|RandomTag))(?!(Audio))
Les étiquettes dans les premières parenthèses imbriquées sont incluses.
Les étiquettesen seconde sont exclues.
dans la vue Logcat D'Eclipse il n'y a pas une telle option. Toutefois, vous pouvez utiliser le niveau de journalisation pour exclure tout message dont le niveau de journalisation est trop faible. Par exemple: le paramètre I (nfo) n'affiche pas les messages d(ebug)et (V) erbose.
un moyen facile de faire cela est simplement en filtrant dans les étiquettes que vous voulez voir.
adb logcat -s "Tag1" -s "Tag2" -s "Tag3"
ne mentionnera que ces étiquettes.