¿Filtrar LogCat para obtener solo los mensajes de Mi aplicación en Android?

Observé que cuando uso Logcat con Eclipse con ADT para Android, también recibo mensajes de muchas otras aplicaciones. ¿Hay alguna manera de filtrar esto y mostrar solo mensajes de mi propia aplicación?

Se garantiza que los nombres de los paquetes sean únicos, por lo que puede usar la función de Log con la etiqueta como su nombre de paquete y luego filtrar por nombre de paquete :

NOTA: A partir de las Herramientas de comstackción 21.0.3, esto dejará de funcionar ya que las ETIQUETAS están restringidas a 23 caracteres o menos.

Log.("", "message");

adb -d logcat : *:S

-d denota un dispositivo real y -e denota un emulador. Si hay más de 1 emulador en ejecución, puede usar -s emulator- (ej., -s emulator-5558 )

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

O si está utilizando System.out.print para enviar mensajes al registro, puede usar adb -d logcat System.out:I *:S para mostrar solo las llamadas a System.out.

Puede encontrar todos los niveles de registro y más información aquí: https://developer.android.com/studio/command-line/logcat.html

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

EDITAR: Parece que salté un poco el arma y me di cuenta de que estabas preguntando sobre logcat en Eclipse. Lo que publiqué arriba es para usar logcat a través de adb desde la línea de comando. No estoy seguro de si los mismos filtros se transfieren a Eclipse.

Linux y OS X

Use ps / grep / cut para tomar el PID, luego grep para las entradas del logcat con ese PID. Aquí está el comando que uso:

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

(Puede mejorar la expresión regular aún más para evitar el problema teórico de líneas de registro no relacionadas que contienen el mismo número, pero nunca ha sido un problema para mí)

Esto también funciona cuando se combinan procesos múltiples.

Windows

En Windows puedes hacer:

 adb logcat | findstr com.example.package 

Añadir filtro

Añadir filtro

Especificar nombres

enter image description here

Elige tu filtro

enter image description here

Para mí esto funciona en Mac Terminal
Llegué a la carpeta donde tienes adb y adb debajo del comando en la terminal

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

Aquí filtrará todos los registros de MyTAG y AndroidRuntime

Actualización 17 de mayo

Han pasado algunos años, y las cosas han cambiado. Y Eclipse ya no es oficialmente compatible. Así que aquí hay dos enfoques más actualizados:

1. Estudio Android

enter image description here En la caja de herramientas del Android monitor , puede filtrar Logcat por debuggable process . Normalmente, cuando desarrolla una aplicación, es un proceso depurable. De vez en cuando estoy teniendo problemas con esto, y hago lo siguiente:

  1. Tools -> Android -> Enable ADB Integration .
    Si ya estaba habilitado, aléjelo y vuelva a encenderlo

  2. Desenchufe y vuelva a conectar su dispositivo móvil.

También hay opciones para filtrar a través de expresiones regulares y el nivel de depuración

2. color de logcat

Este es un buen contenedor de Python sobre adb logcat si quieres usar una solución basada en terminal. Lo bueno de esto es que puedes guardar configuraciones múltiples y simplemente reutilizarlas. Filtrar por tags es bastante confiable. También puede filtrar por package para ver los registros de una o más aplicaciones solamente, pero inicia logcat-color justo antes de iniciar su aplicación.

Vieja respuesta:

Parece que no puedo comentar las respuestas anteriores, así que publicaré una nueva. Este es un comentario a la respuesta de Tom Mulcahy , que muestra cómo debería cambiar el comando para poder trabajar en la mayoría de los dispositivos, ya que la columna de adb shell ps PID es variable.

NOTA: El siguiente comando funciona para los casos donde ha conectado muchos dispositivos. Entonces la device id es necesaria. De lo contrario, simplemente puede omitir los corchetes ‘[‘, ‘]’

1. Para averiguar la columna de pid, escriba:

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

Ahora memorice el número de columna para el PID. La numeración comienza desde 1 .

2. Luego escriba lo siguiente:

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

Simplemente coloque la columna que memorizó en PUT_COLUMN_HERE , por ejemplo, $5

Advertencia

Cada vez que vuelve a ejecutar su aplicación, debe volver a ejecutar el segundo comando, porque la aplicación obtiene un nuevo PID del sistema operativo.

poner esto en applog.sh

 #!/bin/sh PACKAGE=$1 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}:" 

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

Desde Android 7.0, logcat tiene la opción –pid filter, y el comando pidof está disponible, reemplace com.example.app por el nombre de su paquete.
(ubuntu terminal / Desde Android 7.0)

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

o

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

Para obtener más información sobre el comando pidof:
https://stackoverflow.com/a/15622698/7651532

Esto ha estado funcionando para mí en git bash:

 $ pid=$(adb shell ps | grep  | cut -c11-15) ; adb logcat | grep $pid 

Escribí un script de shell para filtrar Logcat por nombre de paquete, que creo que es más confiable que usar

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

Usa / proc / $ pid / cmdline para encontrar el pid real, luego hace un grep en logcat

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

ADT v15 para Eclipse le permite especificar un nombre de aplicación (que en realidad es el valor del paquete en su androidmanifest.xml).

Me encanta poder filtrar por aplicación, pero el nuevo logcat tiene un error con el desplazamiento automático. Cuando se desplaza un poco hacia arriba para mirar los registros anteriores, se desplaza automáticamente hacia atrás en un par de segundos. Parece desplazarse hacia la mitad del registro, lo que evita que salte hacia atrás, pero a menudo es inútil.

EDITAR: Intenté especificar un filtro de aplicación desde la línea de comandos, pero no tuve suerte. Si alguien se da cuenta de esto O cómo detener el desplazamiento automático, házmelo saber.

Si está utilizando Android Studio , puede seleccionar el proceso desde el que desea recibir logcats. Aquí está la captura de pantalla.

enter image description here

Usando el símbolo del sistema de Windows: adb logcat -d | findstr adb logcat -d | findstr .

* Esto fue mencionado por primera vez por jj_ , pero me llevó años encontrarlo en los comentarios …

No estoy seguro de que haya una manera de ver solo los mensajes del sistema con respecto a su aplicación, pero puede filtrar en función de una cadena. Si está haciendo un registro dentro del progtwig, puede simplemente incluir una determinada palabra clave única y filtrar en función de esa palabra.

Simplemente use los filtros dentro del logcat. Hay un botón allí que le permite agregar filtros. Simplemente especifique la ID de la aplicación, asegúrese de que esté seleccionada después, y listo, ¡fácil!

Pruebe: Ventana -> Preferencias -> Android -> LogCat. Cambie el campo “Mostrar vista de logcat si …” el valor “VERBOSE”. Me ayudó.

Si está utilizando Eclipse , presione el signo + verde en la ventana de logCat a continuación y ponga el nombre de su paquete (com.example.yourappname) en el cuadro Nombre de la aplicación . Además, elija cualquier nombre que le resulte cómodo en el cuadro Nombre del filtro y haga clic en Aceptar. Verá solo mensajes relacionados con su aplicación cuando el filtro que acaba de agregar se seleccione desde el panel izquierdo en el logCat.

Dale a tu registro un nombre. Llamé al mío “wawa”.

enter image description here

En Android Studio, vaya a Android-> Editar configuraciones de filtro

enter image description here

Luego escriba el nombre que dio a los registros. En mi caso, se llama “wawa”. Aquí hay algunos ejemplos de los tipos de filtros que puede hacer. Puede filtrar por System.out, System.err, Logs o nombres de paquetes:

enter image description hereenter image description hereenter image description here

Traté de usar la respuesta de Tom Mulcahy, pero desafortunadamente no estaba funcionando para aplicaciones con múltiples procesos, así que la modifiqué para adaptarla a mis necesidades.

 #!/bin/bash if [ "$#" -ne 1 ]; then echo "Illegal number of parameters"; exit 1; fi echo "Lof for package name: $1" PROCESSES=`adb shell ps | grep "$1" | 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" 

Esta es probablemente la solución más simple.

Además de una solución de Tom Mulcahy, puedes simplificarla aún más a continuación:

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

El uso es fácil como un alias normal. Simplemente escriba el comando en su shell:

 logcat 

La configuración de alias lo hace práctico. Y la expresión regular lo hace robusto para aplicaciones multiproceso, suponiendo que solo se preocupe por el proceso principal.

Por ejemplo, puede establecer más alias para cada proceso como desee. O usa la solución de hegazy. 🙂

Además, si desea establecer niveles de registro, es

 alias logcat-w="adb logcat *:W | grep `adb shell ps | egrep '\bcom.your.package.name\b' | cut -c10-15`" 

Use -s !

Debes usar tu propia etiqueta, mira: http://developer.android.com/reference/android/util/Log.html

Me gusta.

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

Y luego, cuando quiera leer el registro, use>

 adb logcat -s AlexeysActivity 

Eso filtra todo lo que no usa la misma etiqueta.

Fuente

Esto funciona para mí con la depuración de USB:

  1. Conecte el dispositivo y use:

    adb shell

  2. Uso simple del logcat:

    logcat | grep com.youapp.packagename

Además de la respuesta de Tom Mulcahy , si desea filtrar por PID en la consola de Windows, puede crear un pequeño archivo por lotes como ese:

 @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% 

En Windows 10, con Ionic, lo que funcionó muy bien para mí fue combinar ‘findstr’ con el “INFO: CONSOLA” generado por todos los mensajes de la aplicación. Entonces, mi comando en línea de comando es:

 adb logcat | findstr INFO:CONSOLE 

Como una variante, puede utilizar el script de terceros PID Cat de Jake Wharton. Este script tiene dos ventajas principales:

  • muestra entradas de registro para procesos desde un paquete de aplicación específico
  • color logcat

De la documentación:

Durante el desarrollo de la aplicación, a menudo solo desea mostrar los mensajes de registro provenientes de su aplicación. Desafortunadamente, debido a que la identificación del proceso cambia cada vez que se implementa en el teléfono, se convierte en un desafío para grep para lo correcto.

Este script resuelve ese problema filtrando por paquete de aplicaciones.

Una salida se ve como enter image description here

Ahora es posible escribir tag: nameofthetag o app: nameoftheapp para filtrar sin agregar nuevos filtros a la barra de filtros guardada

En intelliJ (y probablemente en eclipse también) puede filtrar la salida de logcat por vista web de texto, por lo que imprime básicamente todo lo que está produciendo phonegap

Otra variante de applog.sh de Gavriel con soporte de varios dispositivos y aplicaciones con múltiples procesos:

 #!/bin/sh PKG=$1 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($0,PKG){print $(appcolumn)}' | paste -d \| -s` echo "PID's: $APPIDS" adb $@ logcat -v color | awk "(\$3 ~ /$APPIDS/){print \$0}" 

Uso: applog.sh com.example.my.package [-s ]

Obviamente, esta es una pregunta dirigida al uso de Logcat desde fuera del dispositivo desarrollador, sin embargo, si desea visualizar la salida de Logcat en el dispositivo (mediante progtwigción), solo necesita esto:

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

El *:D al final filtra cada mensaje debajo del nivel de registro de depuración, pero puede dejarlo.

Para dirigir la salida a, por ejemplo, un TextView, consulte, por ejemplo, aquí .

En Linux, esto funcionó para mí:

 adb logcat | grep `adb shell ps | grep your.package | awk '{print $2}'`