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.
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.
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
Ajouter un filtre
spécifier les noms
choisissez votre filtre.
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
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
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
-
Tools
->Android
->Enable ADB Integration
.
Si elle était déjà activée, alors bascule-la, puis de nouveau sur -
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.
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
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
cela a fonctionné pour moi dans git bash:
$ pid=$(adb shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid
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
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.
Si vous utilisez Android Studio vous pouvez sélectionner le processus à partir duquel vous souhaitez recevoir logcats. Voici la capture d'écran.
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.
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!
Essayez: Fenêtre -> Préférences -> Android -> LogCat. Modifier le champ "Afficher la vue logcat si ..."la valeur de "commentaires". Il m'a aidé.
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.
donnez un nom à votre journal. J'ai appelé le mien "wawa".
dans Android Studio, aller à Android - > Modifier les Configurations de filtre
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:
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"
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`"
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.
cela fonctionne pour moi avec le débogage USB:
-
connecter le dispositif et utiliser:
adb shell
-
utilisation simple le logcat:
logcat | grep com.youapp.packagename
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%
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
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.
est maintenant possible de taper tag:nameofthetag ou app:nameoftheapp pour filtrer sans ajouter de nouveaux filtres à la barre de filtres enregistrés
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
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>]
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 .
sous linux, ça a marché pour moi:
adb logcat | grep `adb shell ps | grep your.package | awk '{print }'`