Red de conocimiento informático - Conocimiento informático - Cómo filtrar la salida del comando adb logcat

Cómo filtrar la salida del comando adb logcat

Este artículo describe cómo filtrar la salida de adb logcat desde la línea de comando del shell.

Cuando desarrollo, a menudo veo que los registros de otras personas inundan la pantalla como una inundación. La información que es útil para mí se ahoga, lo que afecta mi estado de ánimo y mi eficiencia. Aquí hay algunos métodos de filtrado que conozco.

1. Mostrar solo el resultado requerido y incluirlo en la lista blanca.

La forma más conveniente es usar el filtrado grep a través de la canalización, de modo que pueda usar la poderosa función de coincidencia de expresiones regulares de grep. Simplemente haga coincidir una cadena en una línea, por ejemplo MyApp:

adb logcat | grep MyApp

adb logcat |

adb logcat | grep --color=auto -i myapp #Establece el color de la cadena coincidente. Consulte la ayuda de grep para obtener más configuraciones.

Si quieres ir más allá, puedes utilizar la coincidencia de expresiones regulares de grep. Por ejemplo, el ejemplo anterior coincidiría con cualquier parte de la línea MyApp; puede configurarlo para que coincida solo con la etiqueta. La salida del registro predeterminada es la siguiente, por lo que si desea cambiar el formato de salida, debe cambiar la expresión en consecuencia.

I/CacheService(665): Preparando DiskCache para todas las miniaturas.

Puedes ver que la marca es el tercer carácter al principio de una línea, así que escribe la expresión según esto:

adb logcat | grep "^..MyApp"

Basado en este formato, también puede configurarlo para que solo muestre registros con una prioridad específica y luego coincida con el primero. personaje. Por ejemplo, para mostrar solo la salida con la etiqueta de nivel de error MyApp:

adb logcat | ^E.MyApp"

Por supuesto, también puede hacer coincidir varias usando Splits | múltiples coincidencias y agrega caracteres de escape. Por ejemplo, para hacer coincidir la salida etiquetada MyApp y MyActivity:

adb logcat | .MyApp|^..MyActivity" #Utilice egrep sin escape

2. Filtrar resultados no deseados y listas negras

Utilice el mismo grep que el anterior y agregue -v. Por ejemplo, para filtrar la salida etiquetada MyApp y MyActivity:

adb logcat | ^..MiAplicación|^..MiActividad" #Utilice egrep sin caracteres de escape

3. Mostrar todos los resultados del mismo proceso

A veces, un programa tiene varias etiquetas. Por lo tanto, es necesario generar todas las etiquetas para el programa (con el mismo PID) al filtrar solo por etiquetas a veces se pueden perder mensajes de error, que a menudo son los mismos que el PID del programa; La idea es encontrar el número de pid según el nombre del paquete y luego compararlo con el pid. Escriba el siguiente script de shell con el nombre del paquete java del programa como parámetro (por ejemplo, com.android.media).

Ver fuente de ayuda para impresión

1#! /bin/bash

2 nombredelpaquete=$1

3 pid=`adb shell ps | grep $nombredelpaquete awk '{print $2}'`

4 adb logcat | grep --color=auto $pid

4. Mostrar desde la hora actual

logcat tiene un caché, por lo que si solo necesita ver el registro actual, debe borrar el anterior. registro.

adb logcat -c amp;adb logcat

5. Filtrar archivos de registro

A veces es necesario analizar los archivos de registro, por lo que aún puedes usar grep para filtrar. documento de registros. Por ejemplo, si el archivo de registro es myapp.log, debe hacer coincidir la salida etiquetada MyApp y MyActivity, luego enviarla a newmyapp.output y luego enviarla a newmyapp.log:

cat myapp.log grep | "^..MyApp\|^..MyActivity" gt; newmyapp.log

Windows recomienda el Bloc de notas, que es un bloc de notas gratuito y potente que admite la búsqueda y el reemplazo de expresiones regulares. Puede resaltar contenido coincidente y eliminar contenido no deseado.

Los consejos anteriores utilizan principalmente grep. De hecho, logcat también tiene una función de filtrado. Puede filtrar registros según etiquetas y prioridades. Consulte el documento oficial de Android "Registros de lectura y escritura". Si prefiere utilizar una interfaz gráfica, consulte "Uso de DDMS". También se puede filtrar en DDMS.

Uso detallado de Android Logcat

El sistema de registro de Android proporciona la función de registrar y ver información de depuración del sistema. El registro proviene de varios programas y algunos buffers del sistema, y ​​estos registros se pueden ver y usar usando el comando logcat.

Utilice el comando logcat

Puede utilizar el comando logcat para ver el contenido del búfer de registro del sistema:

[adb] logcat [lt; ] ... [lt;filter-specgt;] ...

Para obtener una descripción detallada del comando logcat, consulte la lista de opciones del comando logcat.

También puede usar el comando logcat desde un shell adb remoto que se ejecuta en su computadora o emulador/dispositivo y ver la salida del registro en su computadora.

$ adb logcat

También puedes usar:

# logcat

Filtrar la salida del registro

Cada Cada El mensaje de registro de salida de Android tiene una etiqueta y su prioridad.

Las etiquetas de registro describen brevemente la información sin procesar de los componentes del sistema. (Por ejemplo, "Ver" es la etiqueta del sistema de visualización).

Las prioridades se agrupan de mayor a menor de la siguiente manera:

V - Detallado (prioridad más baja)

D - Depuración

I - Información

W - Advertencia

La etiqueta de registro describe brevemente la información sin procesar de los componentes del sistema.

>W - Advertencia

E - Error

F - Fatal

S - Silencio (prioridad más alta), no se imprimirá ninguna información)

Al ejecutar logcat, puede ver la lista de etiquetas de logcat y la prioridad en las dos primeras columnas de información. Las etiquetas de estas dos columnas son las siguientes: lt;

El siguiente es un ejemplo de salida de Logcat con prioridad I, marcada como ActivityManage:

I/ActivityManager(585): Iniciar actividad: Intent { action=android.intent.action. ..}

Para que la salida del registro refleje el nivel de administración, también puede controlar la salida del registro usando filtros, que lo ayudan a describir el nivel de etiqueta de su sistema.

El formato de una declaración de filtro es el siguiente: Descripción etiqueta: prioridad... donde etiqueta representa la etiqueta y prioridad representa el nivel de informe más bajo para la etiqueta. A través de las etiquetas anteriores, puede obtener la prioridad del registro. Puedes escribir etiqueta:prioridad... varias veces en el filtro.

Estas descripciones sólo terminan en los márgenes. A continuación se muestra un ejemplo de una columna que admite todos los mensajes de registro, excepto los mensajes marcados como "ActivityManager" con prioridad "Info" o superior y los mensajes marcados como "MyApp" con prioridad "Debug" o superior, excepto. "*: Otro uso de S es garantizar que la salida del registro esté limitada de acuerdo con la descripción del filtro y que el filtro también se muestre como un elemento en el registro.

La siguiente declaración de filtro significa que el La prioridad de visualización es una advertencia o un mensaje de registro superior:

adb logcat*:W

Si está ejecutando logcat en su computadora, en lugar de un adbshell remoto, también puede hacerlo escribiendo el argumento de la variable de entorno ANDROID_LOG_TAGS: establezca el filtrado predeterminado para registros

export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D*:S"

Tenga en cuenta que si ejecuta logcat desde un shell remoto o use adb shell logcat para ejecutar el emulador/dispositivo, el filtro ANDROID_LOG_TAGS no genera registros

Formato de salida del registro de control

Los mensajes de registro incluyen una serie de campos de metadatos. , incluidas etiquetas y prioridades, que pueden modificar la salida del formato del registro para mostrar campos de metadatos específicos. La información sobre el formato del registro de salida está disponible con la opción -v

breve: muestra la prioridad/etiquetas y. PID del proceso de origen

proceso - solo muestra PID

etiqueta - solo muestra prioridad/etiqueta

hilo - solo muestra proceso: hilo y prioridad/. tag.

raw: muestra información de registro sin procesar, sin otros campos de metadatos.

hora: muestra la fecha, la hora de la llamada, la prioridad/etiqueta y el PID del proceso de origen. >

largo: se muestran todos los campos de metadatos, con líneas en blanco que separan la información.

Al iniciar logcat, puede utilizar la opción -v para especificar el formato de salida:

[adb] logcat [-v lt;formatgt;]

El siguiente es el formato de registro generado mediante subprocesos:

El siguiente es el formato de registro generado mediante subprocesos:

El formato de registro generado mediante subprocesos es el siguiente:

El formato de registro generado mediante subprocesos es el siguiente:

adb logcat -b radio

Ver stdout y stderr

De forma predeterminada, Android almacena stdout y stderr. (System. out y System.err) a /dev/null. En este caso, el sistema registrará información usando stdout y stderr y prioridad I.

Especifique la ruta de salida de esta manera, detenga el emulador/dispositivo en ejecución y luego inicie sesión de forma remota usando el comando setprop

$ adb shell stop

$ adb shell setprop log.redirect-stdio true

$ adb shell start

La configuración del sistema se conservará hasta que cierre el emulador/dispositivo, puede hacerlo agregando /data/local .prop

Lista de comandos de Logcat

Descripción de la opción

-b lt;buffergt;Carga un búfer de registros disponibles para su visualización, como registros de eventos y de radio. El valor predeterminado es principal. Para obtener más información, consulte Visualización de búferes de registro alternativos.

-c borra el registro de la pantalla.

-d genera registros en la pantalla.

-f lt;filenamegt; Especifica el lt;filenamegt; utilizado para generar información de registro, el valor predeterminado es stdout.

-g Genera el búfer de registro especificado y sale después de la salida.

-n lt; countgt; Establece el número máximo de registros lt;. El valor predeterminado es 4 y debe usarse con la opción -r.

-r lt;kbytesgt; Genera un registro cada lt;kbytesgt;. El valor predeterminado es 16 y debe usarse con la opción -f.

-s establece el nivel de filtrado predeterminado en silencioso.

-v Establece el formato de entrada del registro, el valor predeterminado es corto; consulte Control del formato de salida del registro para conocer más formatos compatibles.

-v lt; formatgt; Establece el formato de entrada del registro.