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 solamente?
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 solamente?
Respuestas:
Se garantiza que los nombres de los paquetes serán únicos, por lo que puede usar la Log
función con la etiqueta como nombre del paquete y luego filtrar por nombre del paquete :
NOTA: A partir de Build Tools 21.0.3 esto ya no funcionará ya que las TAGS están restringidas 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 utilizar adb -d logcat System.out:I *:S
para mostrar solo 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é anteriormente es para usar logcat a través de adb desde la línea de comandos. No estoy seguro de si los mismos filtros se transfieren a Eclipse.
logcat <your package name>:<log level>
la respuesta, se sugiere que es posible usar el nombre del paquete como filtro válido. Necesitaba leer la respuesta dos veces para comprender lo que en realidad dice, por lo tanto, recomiendo simplemente cambiar la primera línea a algo así como "¿ logcat <tag>:<log level>
dónde <tag>
puede estar el nombre de su paquete si también lo usó como etiqueta android.util.Log
"
Use ps / grep / cut para tomar el PID, luego grep para las entradas logcat con ese PID. Aquí está el comando que uso:
adb logcat | grep -F "`adb shell ps | grep com.asanayoga.asanarebel | tr -s [:space:] ' ' | cut -d' ' -f2`"
(Podría mejorar aún más la expresión regular 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 combinan múltiples procesos.
En Windows puedes hacer:
adb logcat | findstr com.example.package
pid=$(adb shell ps | grep "package-name" | cut -c10-15) && adb logcat | grep $pid
adb logcat | grep `adb shell ps | grep org.videolan.vlc | awk '{print $2")"}'`
adb logcat | findstr com.example.package
adb logcat | grep `adb shell ps | grep com.example.package | tr -s [:space:] ' ' | cut -d' ' -f2`
Desde Android 7.0, logcat tiene la opción de filtro --pid, y el comando pidof está disponible, reemplace com.example.app por el nombre de su paquete.
(Terminal 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 obtener más información sobre el comando pidof:
https://stackoverflow.com/a/15622698/7651532
grep
y findstr
, pero solo están filtrando registros con algún valor, excluyendo muchos mensajes. Su respuesta es la verdadera, muestre todo el registro sobre la aplicación sin excluir el mensaje de registro de otras bibliotecas. Es como el filtro actual 'Mostrar solo los seleccionados' de Android Studio. ¡Gracias!
Añadir filtro
Especificar nombres
Elige tu filtro.
Para mí, esto funciona en Mac. Terminal
Llegué a la carpeta donde tiene que adb
escribir el siguiente comando en la terminal
./adb logcat MyTAG:V AndroidRuntime:E *:S
Aquí filtrará todos los registros MyTAG
yAndroidRuntime
Log.d("MyTAG", "i am hero"); Log.d("AndroidRunTime", "i am zero");
2) DEPURAR iniciar sesión en Android $ adb -s RKSCWSOV5SAIEUSC shell;
3) $ logcat MyTAG:V AndroidRuntime:E *:S
4) ahora mostrará detallado de MyTAG y errores de AndroidRuntime
Han pasado algunos años, y las cosas han cambiado. Y Eclipse ya no es oficialmente compatible. Aquí hay dos enfoques más actualizados:
En la Android monitor
caja de herramientas, puede filtrar logcat por debuggable process
. Normalmente, cuando desarrolla una aplicación, es un proceso depurable. De vez en cuando tengo problemas con esto, y hago lo siguiente:
Tools
-> Android
-> Enable ADB Integration
.
Si ya estaba habilitado, apague y vuelva a encender
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
Este es un buen contenedor de Python además de adb logcat
si desea usar una solución basada en terminal. Lo bueno de esto es que puede guardar múltiples configuraciones y simplemente reutilizarlas. Filtrar por tags
es bastante confiable. También puede filtrar por package
para ver registros de una o más aplicaciones solamente, pero comienza logcat-color
justo antes de iniciar su aplicación.
Parece que no puedo comentar las respuestas anteriores, por lo que publicaré una nueva. Este es un comentario a la respuesta de Tom Mulcahy , que muestra cómo debe cambiar el comando para que funcione en la mayoría de los dispositivos, ya que la adb shell ps
columna PID es variable.
NOTA: El siguiente comando funciona para los casos en los que ha conectado muchos dispositivos. Entonces device id
es necesario. 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 ponga la columna que memorizó PUT_COLUMN_HERE
, p. Ej.$5
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 a 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
log.d("TAG", "multine\nlog")
por ejemplo): adb -d logcat -v long | sed -Ene '/^\[.*'" (${APPID}):"'.*\]/ { N; s/\n/ /; p; :a;' -e 'n; p; s/^.+$/foo/; t a;' -e ' }' | grep -v '^$'
- Dejé el tr
, supongo que es necesario en los sistemas Windows, y envolví el APPID
paréntesis para permitir múltiples pids (separados por |
) .
Esto funciona para mí con la depuración de USB:
Conecte el dispositivo y use:
adb shell
Use el logcat cuando esté conectado:
logcat | grep com.yourapp.packagename
Si está utilizando Android Studio , puede seleccionar el proceso desde el que desea recibir logcats. Aquí está la captura de pantalla.
Log cat has a new option (on by default) which creates an application filter automatically such that only the launched application's output is shown
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 hace un grep en logcat
Ubuntu: adb logcat -b all -v color --pid = `adb shell pidof -s com.packagename` Con color y registro continuo de la aplicación
adb shell pidof ...
bit no funcionó para mí, así que adb shell
ingresé al dispositivo y ejecuté la top
copia del PID de mi aplicación allí y luego lo reemplacé en su comando
pgrep
lugar de pidof
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 abajo en unos segundos. Parece que desplazarse 1/2 camino hacia arriba del registro evita que salte al fondo, pero a menudo eso es inútil.
EDITAR: intenté especificar un filtro de aplicación desde la línea de comandos, pero no tuve suerte. Si alguien resuelve esto O cómo detener el desplazamiento automático, hágamelo saber.
Que utilizan Windows símbolo del sistema: adb logcat -d | findstr <package>
.
* Esto fue mencionado por primera vez por jj_ , pero me llevó años encontrarlo en los comentarios ...
Como variante, puede utilizar el script PID Cat de terceros de Jake Wharton. Este script tiene dos ventajas principales:
De la documentación:
Durante el desarrollo de la aplicación, a menudo solo desea mostrar mensajes de registro provenientes de su aplicación. Desafortunadamente, debido a que el ID del proceso cambia cada vez que lo implementa en el teléfono, se convierte en un desafío para buscar lo correcto.
Este script resuelve ese problema al filtrar por paquete de aplicación.
Pruebe: Ventana -> Preferencias -> Android -> LogCat. Cambie el campo "Mostrar vista logcat si ..." el valor "VERBOSE". Me ayudó.
Si está utilizando Eclipse , presione el signo verde + en la ventana de logCat a continuación y coloque el nombre del 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. Solo verá mensajes relacionados con su aplicación cuando el filtro que acaba de agregar se elija desde el panel izquierdo en logCat.
Dale un nombre a tu registro. Yo 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". Estos son algunos ejemplos de los tipos de filtros que puede hacer. Puede filtrar por System.out, System.err, Logs o nombres de paquetes:
Esta es probablemente la solución más simple.
Además de una solución de Tom Mulcahy, puede 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 útil. Y la expresión regular lo hace robusto para aplicaciones multiproceso, suponiendo que solo se preocupe por el proceso principal.
Por supuesto, puede establecer más alias para cada proceso como desee. O use 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`"
Traté de usar la respuesta de Tom Mulcahy, pero desafortunadamente no funcionaba para aplicaciones con múltiples procesos, así que la edité para satisfacer 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"
Uso -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 registro, usa>
adb logcat -s AlexeysActivity
Eso filtra todo lo que no usa la misma etiqueta.
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%
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");
los *:D
final, se filtran todos los mensajes por debajo del nivel de registro de depuración, pero puede omitirlo.
Para dirigir la salida a, por ejemplo, un TextView, consulte, por ejemplo, aquí .
Ahora es posible escribir tag: nameofthetag o app: nameoftheapp para filtrar sin agregar nuevos filtros a la barra de filtros guardados
En intelliJ (y probablemente también en eclipse) puede filtrar la salida de logcat por vista web de texto , por lo que imprime básicamente todo lo que produce phonegap
Otra variante de Gavriel's applog.sh
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>]
En Linux, esto funcionó para mí:
adb logcat | grep `adb shell ps | grep your.package | awk '{print $2}'`