studio - ¿Filtrar LogCat para obtener solo los mensajes de Mi aplicación en Android?
logcat without android studio (29)
Actualización del 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. Android Studio
En la caja de herramientas del Android monitor
, puede filtrar logcat por debuggable process
. Normalmente, cuando desarrollas una aplicación, es un proceso de depuración. De vez en cuando estoy teniendo problemas con esto, y hago lo siguiente:
Tools
->Android
->Enable ADB Integration
.
Si ya estaba habilitado, entonces desactívalo y vuelve a encenderlo.Desenchufe y vuelva a enchufar su dispositivo móvil.
También hay opciones para filtrar a través de expresiones regulares y el nivel de depuración
2. logcat-color
Este es un buen envoltorio de Python sobre adb logcat
si desea utilizar una solución basada en terminal. Lo bueno de esto es que puede guardar múltiples configuraciones y simplemente reutilizarlas. El filtrado por tags
es bastante fiable. También puede filtrar por package
para ver los registros de una o más aplicaciones, pero inicia logcat-color
justo antes de iniciar su aplicación.
Respuesta anterior:
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 que funcione en la mayoría de los dispositivos, ya que la columna adb shell ps
PID es variable.
NOTA: El siguiente comando funciona para los casos en los que ha conectado muchos dispositivos. Así device id
se necesita la device id
. 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 vuelva a ejecutar la aplicación, deberá volver a ejecutar el segundo comando, ya que la aplicación obtiene un nuevo PID del sistema operativo.
Observé que cuando uso Logcat con Eclipse con ADT para Android, también recibo mensajes de muchas otras aplicaciones. ¿Hay alguna forma de filtrar esto y mostrar solo los mensajes de mi propia aplicación?
Linux y OS X
Use ps / grep / cut para tomar el PID, luego grep para las entradas logcat con ese PID. Aquí está el comando que utilizo:
adb logcat | grep -F "`adb shell ps | grep com.example.package | cut -c10-15`"
(Podría mejorar la expresión regular aún más para evitar el problema teórico de las 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 emparejan múltiples procesos.
Windows
En Windows puedes hacer:
adb logcat | findstr com.example.package
Añadir filtro
Especificar nombres
Elige tu filtro.
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 ver los registros anteriores, se desplaza automáticamente hacia la parte inferior en un par de segundos. Parece que desplazarse 1/2 camino hacia arriba en el registro evita que salte de nuevo al fondo, 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 descubre esto O cómo detener el desplazamiento automático, hágamelo saber.
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%
Ahora es posible escribir tag: nameofthetag o app: nameoftheapp para filtrar sin agregar nuevos filtros a la barra de filtros guardada
Como variante, puede utilizar un script PID Cat de terceros por Jake Wharton. Este script tiene dos ventajas principales:
- Muestra las entradas de registro para los procesos de un paquete de aplicación específico.
- color logcat
De la documentación:
Durante el desarrollo de la aplicación, a menudo desea mostrar solo los mensajes de registro que provienen 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 la cosa correcta.
Este script resuelve ese problema al filtrar por paquete de aplicación.
Dale un nombre a tu registro. Llamé al mío "wawa".
En Android Studio, vaya a Android-> Editar configuraciones de filtro
Luego escriba el nombre que le 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 Sistema.out, Sistema.err, Registros o nombres de paquetes:
Desde Android 7.0, logcat tiene la opción --pid filter, y el comando pidof está disponible, reemplaza com.example.app por el nombre de tu paquete.
(terminal de ubuntu / 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 más información sobre el comando pidof:
https://.com/a/15622698/7651532
En Windows 10, utilizando Ionic, lo que funcionó muy bien para mí fue combinar ''findstr'' con el "INFO: CONSOLE" generado por todos los mensajes de la aplicación. Entonces, mi comando en la línea de comandos es:
adb logcat | findstr INFO:CONSOLE
En intelliJ (y probablemente también en eclipse) puede filtrar la salida logcat por texto webview , por lo que imprime básicamente todo lo que Phonegap produce
En linux, esto me funcionó:
adb logcat | grep `adb shell ps | grep your.package | awk ''{print $2}''`
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
Utiliza / proc / $ pid / cmdline para averiguar el pid real, luego hacer un grep en logcat
Esta es probablemente la solución más simple.
Además de una solución de Tom Mulcahy, puede simplificarla aún más como 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 alias normal. Solo escribe el comando en tu shell:
logcat
La configuración de alias lo hace práctico. Y la expresión regular lo hace robusto para aplicaciones de procesos múltiples, asumiendo que usted se preocupa solo por el proceso principal.
De Coz puede establecer más alias para cada proceso que 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`"
Esto ha estado trabajando para mí en Git Bash:
$ pid=$(adb shell ps | grep <package name> | cut -c11-15) ; adb logcat | grep $pid
Esto me funciona con la depuración USB:
Conecta el dispositivo y utiliza:
adb shell
Simplemente use el logcat:
logcat | grep com.youapp.packagename
Intenté usar la respuesta de Tom Mulcahy, pero desafortunadamente no funcionaba para aplicaciones con múltiples procesos, así que lo edito para que se ajuste 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"
No estoy seguro de que haya una manera de ver solo los mensajes del sistema con respecto a su aplicación, pero puede filtrar según una cadena. Si está realizando un registro dentro del programa, puede incluir una determinada palabra clave única y filtrar en función de esa palabra.
Obviamente, esta es una pregunta dirigida al uso de Logcat desde fuera del dispositivo desarrollador. Sin embargo, si desea mostrar la salida de Logcat en el dispositivo (mediante programación), solo necesita esto:
Runtime.getRuntime().exec("logcat " + android.os.Process.myPid() + " *:D");
La *:D
al final filtra todos los mensajes por debajo del nivel de registro de depuración, pero puede omitirlo.
Para dirigir la salida a, digamos, un TextView, vea por ejemplo here .
Otra variante más del 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 <specific device>]
Para mi esto funciona en mac Terminal
Llegó a la carpeta en la que tiene adb
luego escriba el siguiente comando en la terminal
./adb logcat MyTAG:V AndroidRuntime:E *:S
Aquí se filtrarán todos los registros de MyTAG
y AndroidRuntime
Pruebe: Ventana -> Preferencias -> Android -> LogCat. Cambie el campo "Mostrar vista logcat si ..." el valor "VERBOSE". Me ayudó.
Si está utilizando Android Studio , puede seleccionar el proceso desde el cual desea recibir logcats. Aquí está la captura de pantalla.
Si está utilizando Eclipse , presione el signo + verde en la ventana logCat a continuación y ponga el nombre de su paquete (com.example.yourappname) en el cuadro de 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 los mensajes relacionados con su aplicación cuando el filtro que acaba de agregar se elija en el panel izquierdo de logCat.
Solo usa los filtros dentro del logcat. Hay un botón que te permite agregar filtros. Simplemente especifique el ID de la aplicación, asegúrese de que se seleccione más adelante y listo, ¡fácil!
Utilizando el símbolo del sistema de Windows: adb logcat -d | findstr <package>
adb logcat -d | findstr <package>
.
* Esto fue mencionado por primera vez por jj_ , pero me llevó años encontrarlo en los comentarios ...
pon 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
Usa -s
!
Debe usar su propia etiqueta, consulte: http://developer.android.com/reference/android/util/Log.html
Me gusta.
Log.d("AlexeysActivity","what you want to log");
Y luego cuando quieras leer el log usa>
adb logcat -s AlexeysActivity
Eso filtra todo lo que no usa la misma etiqueta.
Source
Se garantiza que los nombres de los paquetes son ú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 Build Tools 21.0.3 esto ya no funcionará ya que los TAGS están restringidos a 23 caracteres o menos.
Log.<log level>("<your package name>", "message");
adb -d logcat <your package name>:<log level> *: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-<emulator number>
(por ejemplo, -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 estaba 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.