Filtrer LogCat pour obtenir seulement les messages de mon Application dans Android?

j'ai observé que lorsque J'utilise Logcat avec Eclipse avec ADT pour Android, je reçois des messages de nombreuses autres applications ainsi. Y a-t-il un moyen de filtrer ceci et de n'afficher que les messages de ma propre application seulement.

252

29 réponses

les noms de paquets sont garantis comme étant uniques de sorte que vous pouvez utiliser la fonction Log avec l'étiquette comme nom de paquet et ensuite filtrer par nom de paquet :

NOTE: à partir de Build Tools 21.0.3 cela ne fonctionnera plus car les TAGS sont limités à 23 caractères ou moins.

Log.<log level>("<your package name>", "message");

adb -d logcat <your package name>:<log level> *:S

-d dénote une dispositif réel et -e dénote un émulateur. S'il y a plus d'un émulateur qui fonctionne, vous pouvez utiliser -s emulator-<emulator number> (par exemple, -s emulator-5558 )

exemple: adb -d logcat com.example.example:I *:S

ou si vous utilisez System.out.print pour envoyer des messages au journal, vous pouvez utiliser adb -d logcat System.out:I *:S pour afficher uniquement les appels vers le système.hors.

vous pouvez trouver tous les niveaux de log et plus d'informations ici: https://developer.android.com/studio/command-line/logcat.html

http://developer.android.com/reference/android/util/Log.html

EDIT: on dirait que j'ai un peu sauté sur l'occasion et que j'ai réalisé que vous parliez de logcat dans Eclipse. Ce que j'ai posté ci-dessus est pour utiliser logcat via adb depuis la ligne de commande. Je ne suis pas sûr que les mêmes filtres passent dans Eclipse.

209
répondu shanet 2016-06-07 17:30:11

Linux et OS X

utiliser ps/grep / cut pour saisir le PID, puis grep pour les entrées logcat avec CE PID. Voici la commande que j'utilise:

adb logcat | grep -F "`adb shell ps | grep com.example.package | cut -c10-15`"

(vous pourriez encore améliorer le regex pour éviter le problème théorique de lignes de log sans rapport contenant le même nombre, mais il n'a jamais été un problème pour moi)

cela fonctionne également lors de l'appariement de plusieurs processus.

Windows

Sous Windows vous pouvez faire:

adb logcat | findstr com.example.package
305
répondu Tom Mulcahy 2018-05-07 21:32:45

Ajouter un filtre

Add filter

spécifier les noms

enter image description here

choisissez votre filtre.

enter image description here

49
répondu beryllium 2013-08-02 08:17:31

pour moi cette oeuvre dans mac Terminal

Je suis arrivé au dossier où vous avez adb puis tapez commande ci-dessous dans le terminal

./adb logcat MyTAG:V AndroidRuntime:E *:S

ici, il filtrera tous les journaux de MyTAG et AndroidRuntime

15
répondu Inder Kumar Rathore 2014-05-08 05:40:05

Mettre À Jour Le 17 Mai

ça fait quelques années, et les choses ont changé. Et Eclipse n'est plus officiellement supporté. Alors voici deux autres approches à jour:

1. Android Studio

enter image description here Dans la boîte à outils Android monitor , vous pouvez filtrer logcat par debuggable process . Normalement, lorsque vous développez une application c'est un debuggable processus. Chaque fois que dans un certain temps je suis

  1. Tools -> Android -> Enable ADB Integration .

    Si elle était déjà activée, alors bascule-la, puis de nouveau sur

  2. débranchez et relayez votre appareil mobile.

Il ya aussi des options pour filtrer via regex et le niveau de débogage

2. logcat-couleur

c'est un joli emballage python en plus de adb logcat si vous voulez utiliser une solution basée sur un terminal. La bonne chose à ce sujet est que vous pouvez enregistrer plusieurs configurations et simplement de les réutiliser. Le filtrage par tags est assez fiable. Vous pouvez également filtrer par package pour voir les journaux d'une ou plusieurs applications seulement, mais vous démarrez logcat-color juste avant de lancer votre application.

Ancienne Réponse:

Il semble que je ne peux pas commenter les précédentes réponses, donc je vais en poster une nouvelle. Il s'agit d'un commentaire à Tom Mulcahy 'S réponse, qui montre comment la commande devrait changer afin de travailler sur la plupart des dispositifs, depuis adb shell ps pid colonne est variable.

NOTE: la commande ci-dessous fonctionne pour les cas où vous avez connecté de nombreux appareils. Donc device id est nécessaire. Sinon, vous pouvez simplement omettre les crochets' [', "]

1. Pour connaître la colonne de pid, tapez:

adb [-s DEVICE_ID] shell ps | head -n 1

mémorisez maintenant le numéro de colonne pour le PID. La numérotation commence par 1 .

2. Tapez ensuite:

adb [-s DEVICE_ID] logcat | grep $(adb [-s DEVICE_ID] shell ps \
| grep "com.example" | awk -F" " ' {print $PUT_COLUMN_HERE}')

mettez simplement la colonne que vous avez mémorisée dans PUT_COLUMN_HERE , par exemple

mise en garde

Chaque fois que vous relancez votre application, vous devez relancer la 2ème commande, parce que l'application reçoit un nouveau PID à partir de L'OS.

13
répondu Paschalis 2017-05-28 11:24:43

mettez ceci à applog.sh

#!/bin/sh
PACKAGE=
APPPID=`adb -d shell ps | grep "${PACKAGE}" | cut -c10-15 | sed -e 's/ //g'`
adb -d logcat -v long \
 | tr -d '\r' | sed -e '/^\[.*\]/ {N; s/\n/ /}' | grep -v '^$' \
 | grep " ${APPPID}:"

alors: applog.sh com.example.my.package

9
répondu Gavriel 2014-08-05 18:41:54

depuis Android 7.0, logcat a l'option -- pid filter, et la commande pidof est disponible, remplacer com.exemple.application pour votre nom de paquet.

(ubuntu terminal / Android 7.0)

adb logcat --pid=`adb shell pidof -s com.example.app`

ou

adb logcat --pid=$(adb shell pidof -s com.example.app)

pour plus d'informations sur la commande pidof:

https://stackoverflow.com/a/15622698/7651532

9
répondu You Kim 2018-05-24 06:53:09

cela a fonctionné pour moi dans git bash:

$ pid=$(adb shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid
8
répondu wubwubb 2014-03-09 00:48:18

j'ai écrit un script shell pour filtrer logcat par nom de paquet, ce qui est plus fiable que d'utiliser

ps | grep com.example.package | cut -c10-15

il utilise /proc / $pid / cmdline pour trouver le pid réel, puis faire un grep sur logcat

https://gist.github.com/kevinxucs/7340e1b1dd2239a2b04a

7
répondu kevin 2014-05-23 01:46:18

ADT v15 pour Eclipse vous permet de spécifier un nom d'application (qui est en fait la valeur du paquet dans votre androidmanifest.XML.)

j'adore pouvoir filtrer par app, mais le nouveau logcat a un bug avec l'autoscroll. Lorsque vous faites défiler un peu vers le haut pour regarder les logs précédents, il glisse automatiquement vers le bas en quelques secondes. Il semble défiler 1/2 chemin vers le haut de la bûche ne l'empêche de revenir au fond, mais c'est souvent inutile.

EDIT: j'ai essayé de spécifier un filtre app à partir de la ligne de commande -- mais pas de chance. Si quelqu'un comprend cela ou comment arrêter l'autoscroll, s'il vous plaît laissez-moi savoir.

6
répondu Aaron T Harris 2011-11-13 20:27:47

Si vous utilisez Android Studio vous pouvez sélectionner le processus à partir duquel vous souhaitez recevoir logcats. Voici la capture d'écran.

enter image description here

6
répondu dmSherazi 2013-11-17 07:35:36

utilisant l'invite de commande de Windows: adb logcat -d | findstr <package> .

*cela a été mentionné pour la première fois par jj_ , mais il m'a fallu des années pour le trouver dans les commentaires...

6
répondu rareclass 2017-05-23 11:47:19

Je ne suis pas sûr qu'il y ait un moyen de voir seulement les messages système concernant votre application, mais vous pouvez filtrer basé sur une chaîne de caractères. Si vous faites un log dans le programme, vous pouvez juste inclure un certain mot clé unique, et filtrer basé sur ce mot.

2
répondu bjpcomet 2011-07-28 04:39:56

il suffit d'utiliser les filtres à l'intérieur du logcat. Il y a un bouton qui vous permet d'ajouter des filtres. Il suffit de spécifier L'ID de l'application, assurez-vous qu'il est sélectionné après, et vous avez terminé, facile!

2
répondu Gerard 2012-04-15 19:15:05

Essayez: Fenêtre -> Préférences -> Android -> LogCat. Modifier le champ "Afficher la vue logcat si ..."la valeur de "commentaires". Il m'a aidé.

2
répondu Siruk Viktor 2012-12-06 15:50:38

si vous utilisez Eclipse , appuyez sur le vert + signe dans la fenêtre logCat ci-dessous et mettez votre nom de paquet (com.exemple.yourappname) dans la case par nom D'Application . Aussi, choisissez n'importe quel nom confortable pour vous dans nom de filtre boîte et cliquez ok. Vous ne verrez que les messages relatifs à votre application lorsque le filtre que vous venez d'ajouter est choisi dans le volet de gauche le logCat.

2
répondu Khaled Alanezi 2013-01-25 01:12:31

donnez un nom à votre journal. J'ai appelé le mien "wawa".

enter image description here

dans Android Studio, aller à Android - > Modifier les Configurations de filtre

enter image description here

tapez ensuite le nom que vous avez donné aux logs. Dans mon cas, ça s'appelle "wawa". Voici quelques exemples de types de filtres que vous pouvez faire. Vous pouvez filtrer par Système.hors, Système.err, les Journaux, ou de noms de paquets:

enter image description here enter image description here enter image description here

1
répondu Gene 2015-04-20 19:47:09

j'ai essayé d'utiliser la réponse de Tom Mulcahy mais malheureusement elle ne fonctionnait pas pour les applications avec des processus multiples donc je l'édite pour répondre à mes besoins.

#!/bin/bash
if [ "$#" -ne 1 ]; then echo "Illegal number of parameters"; exit 1; fi
echo "Lof for package name: "
PROCESSES=`adb shell ps | grep "" | cut -c10-15`
NUM_OF_PROCESSES=`echo "$PROCESSES" | wc -l`
if [ $NUM_OF_PROCESSES -eq 0 ]; then echo "The application is not running!"; exit 1; fi
COUNTER=1
for process in $PROCESSES; do
        if [ $COUNTER -eq 1 ]; then GREP_TEXT="("; fi
        GREP_TEXT+=$process
        if [ $COUNTER -eq $NUM_OF_PROCESSES ]; then GREP_TEXT+=")"; else GREP_TEXT+="|"; fi
        let COUNTER=COUNTER+1 
        if [ $COUNTER -gt $NUM_OF_PROCESSES ]; then break; fi  
done
adb logcat | grep -E "$GREP_TEXT"
1
répondu Ahmed Hegazy 2015-08-31 16:10:47

C'est probablement la solution la plus simple.

en plus d'une solution de Tom Mulcahy, vous pouvez encore la simplifier comme ci-dessous:

alias logcat="adb logcat | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"
L'utilisation de

est aussi simple que l'alias normal. Il suffit de taper la commande dans votre shell:

logcat

l'alias setup le rend pratique. Et le regex le rend robuste pour les applications multi-processus, en supposant que vous vous souciez uniquement du processus principal.

De coz vous pouvez définir plus Alias pour chaque processus comme vous voulez. Ou utilisez la solution de hegazy. :)

de plus, si vous voulez définir des niveaux de journalisation, c'est

alias logcat-w="adb logcat *:W | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`"
1
répondu Frank Du 2015-11-11 18:36:39

Utiliser -s !

vous devriez utiliser votre propre étiquette, regardez: http://developer.android.com/reference/android/util/Log.html

comme.

Log.d("AlexeysActivity","what you want to log");

et ensuite quand vous voulez lire le log utiliser>

adb logcat -s AlexeysActivity

qui filtre tout ce qui n'utilise pas la même étiquette.

Source

1
répondu KrisWebDev 2017-05-23 12:18:15

cela fonctionne pour moi avec le débogage USB:

  1. connecter le dispositif et utiliser:

    adb shell

  2. utilisation simple le logcat:

    logcat | grep com.youapp.packagename

1
répondu Lennoard Silva 2017-01-31 14:10:20

en plus de Tom Mulcahy 'S réponse, si vous voulez filtrer par PID sur la console de Windows, vous pouvez créer un petit fichier par lot comme cela:

@ECHO OFF

:: find the process id of our app (2nd token)
FOR /F "tokens=1-2" %%A IN ('adb shell ps ^| findstr com.example.my.package') DO SET PID=%%B

:: run logcat and filter the output by PID
adb logcat | findstr %PID%
1
répondu Lawyno 2017-03-11 18:31:08

sur Windows 10, en utilisant Ionic, ce qui a bien fonctionné pour moi était de combiner 'findstr' avec la "INFO:CONSOLE" générée par tous les messages App. Donc, ma commande en ligne de commande est:

adb logcat | findstr INFO:CONSOLE
1
répondu Lud Akell 2017-12-21 23:33:45

comme variante, vous pouvez utiliser le script tiers PID Cat par Jake Wharton. Ce script a deux avantages majeurs:

  • indique les entrées de journal pour les processus à partir d'un dossier de demande spécifique
  • couleur logcat

à Partir de la documentation:

pendant le développement de l'application, vous ne souhaitez souvent afficher que les messages provenant de votre application. Malheureusement, parce que l'ID du processus change chaque fois que vous vous déployez au téléphone, il devient un défi pour grep pour la bonne chose.

ce script résout ce problème en filtrant par paquet d'application.

Une sortie ressemble enter image description here

1
répondu yoAlex5 2018-06-21 20:26:15

est maintenant possible de taper tag:nameofthetag ou app:nameoftheapp pour filtrer sans ajouter de nouveaux filtres à la barre de filtres enregistrés

0
répondu Fernando Gallego 2014-03-10 10:17:12

dans intelliJ (et probablement dans eclipse aussi) vous pouvez filtrer la sortie logcat par le texte webview , de sorte qu'il imprime essentiellement tout phonegap produit

0
répondu Marcin Mikołajczyk 2014-07-01 06:23:29

encore une autre variante du applog.sh de Gavriel avec le soutien de plusieurs dispositifs et applications avec des processus multiples:

#!/bin/sh
PKG=
shift

APPIDS=`adb $@ shell ps | awk -v PKG="$PKG" '
    (NR == 1){appcolumn=2; for (i=1; i<=NF; i++) if ($i=="PID") {appcolumn=i}}
    index("151900920",PKG){print $(appcolumn)}' | paste -d \| -s`

echo "PID's: $APPIDS"
adb $@ logcat -v color | awk  "($3 ~ /$APPIDS/){print $0}"

Utilisation: applog.sh com.example.my.package [-s <specific device>]

0
répondu ls.illarionov 2016-04-02 03:30:42

il s'agit évidemment d'une question visant à l'utilisation de Logcat à partir de en dehors de du périphérique développeur, mais si vous voulez afficher la sortie Logcat sur le périphérique (programmatically), vous avez juste besoin de ceci:

Runtime.getRuntime().exec("logcat " + android.os.Process.myPid() + " *:D");

le *:D à la fin filtre tous les messages en dessous du niveau de débogage, mais vous pouvez laisser cela de côté.

Pour diriger la sortie vers, disons, un TextView, voir par exemple ici .

0
répondu Tom Ladek 2017-08-06 21:04:41

sous linux, ça a marché pour moi:

adb logcat | grep `adb shell ps | grep your.package | awk '{print }'`
0
répondu spectralsun 2018-08-30 18:36:03