Logcat es una herramienta de línea de comandos que vuelca un registro de mensajes del sistema, incluidos los rastros de pila cuando el dispositivo arroja un error y mensajes que ha escrito desde su aplicación con la claseLog
.
Esta página trata sobre la herramienta logcat de línea de comandos, pero también puedes ver mensajes de registro desde la ventana Logcat en Android Studio. Para obtener información sobre cómo ver y filtrar registros desde Android Studio,consulta Escribir y ver registros con Logcat.
Descripción general del sistema de registro
El sistema de registro de Android es un conjunto de búferes circulares estructurados mantenidos por el proceso del sistema logd
. El sistema fija y define el conjunto de búferes disponibles. Los más relevantes son: main
, que almacena la mayoría de los registros de aplicaciones, system
, que almacena los mensajes procedentes del sistema operativo Android, y crash
, que almacena los registros de fallos. Cada registro de entrada tiene una prioridad (uno de VERBOSE
DEBUG
INFO
WARNING
ERROR
o FATAL
), una etiqueta que identifica el origen del registro, y el verdadero mensaje de registro.
La interfaz principal del sistema de registro es la biblioteca compartida liblog
y su encabezado <android/log.h>
. Todas las instalaciones de registro específicas del idioma eventualmente llaman a la función __android_log_write
. De forma predeterminada, llama a la función __android_log_logd_logger
, que envía la entrada de registro a logd
utilizando un socket. A partir del nivel de API 30, la función de registro se puede cambiar llamando a __android_set_log_writer
. Más información está disponible en la documentación de NDK.
Los registros mostrados por adb logcat
se someten a cuatro niveles de filtrado:
- Filtrado en tiempo de compilación: dependiendo de la configuración de compilación, algunos registros pueden eliminarse completamente del binario. Por ejemplo, Proguard se puede configurar para eliminar llamadas a
Log.d
del código Java. - Filtrado de propiedades del sistema:
liblog
consulta un conjunto de propiedades del sistema para determinar el nivel de gravedad mínimo que se enviará alogd
. Si los registros tienen la etiquetaMyApp
, las siguientes propiedades son revisados, y se espera que contienen la primera letra de la gravedad mínima (V
D
I
W
E
oS
desactivar todos los registros):
log.tag.MyApp
persist.log.tag.MyApp
log.tag
persist.log.tag
liblog
utiliza la prioridad mínima establecida por __android_log_set_minimum_priority
. La configuración predeterminada es INFO
.adb logcat
admite filtros adicionales que pueden reducir la cantidad de registros mostrados desdelogd
. Vea más abajo para más detalles.Sintaxis de línea de comandos
Para ejecutar logcat a través del shell adb, el uso general es:
logcat ... ...
puede ejecutar logcat
como un comando adb o directamente en el intérprete de comandos de tu emulador o dispositivo conectado. Para ver la salida de registro con adb, vaya a su SDK platform-tools/
directorio y ejecute:
adb logcat
Para logcat
ayuda en línea, inicie un dispositivo y luego ejecute:
adb logcat --help
Puede crear una conexión de shell a un dispositivo y ejecutar:
$ adb shell# logcat
Opciones
La siguiente tabla describe las opciones de línea de comandos logcat
.
Opción | Descripción |
---|---|
-b <buffer> |
Cargar una alternativa búfer de registro para la visualización, tales como events o radio . El main system y crash conjunto de tampón se utiliza por defecto. Consulte Visualización de Búferes de Registro Alternativos. |
-c, --clear |
Clear (color), el seleccionado y búferes de salida. El valor predeterminado juego tampón main system y crash . Para borrar todos los búferes, use -b all -c . |
-e <expr>, --regex=<expr> |
imprimir Sólo las líneas donde el mensaje de registro de los partidos de <expr> donde <expr> es una expresión regular. |
-m <count>, --max-count=<count> |
Dejar de fumar después de la impresión de <count> número de líneas. Esto se debe emparejar con --regex , pero funcionará por sí solo. |
--print
|
Emparejado con --regex y --max-count para permitir que el contenido omita el filtro de expresiones regulares, pero se detenga en el número correcto de coincidencias. |
-d |
Volcar el registro a la pantalla y se sale. |
-f <filename> |
Escribir mensaje de registro de salida de <filename> . El valor predeterminado es stdout . |
-g, --buffer-size |
Imprimir el tamaño del búfer de registro y salidas. |
-n <count> |
Establecer el número máximo de rotado de logs <count> . El valor predeterminado es 4. Requiere la opción -r . |
-r <kbytes> |
Rotar el archivo de registro de cada <kbytes> de salida. El valor predeterminado es 16. Requiere la opción -f . |
-s
|
Equivalente a la expresión de filtro '*:S' , que establece la prioridad para todas las etiquetas en silencioso y se usa para preceder a una lista de expresiones de filtro que agregan contenido. Para obtener más información, vaya a la sección sobre filtrado de salida de registro. |
-v <format> |
Establecer el formato de salida para los mensajes de registro. El formato predeterminado es threadtime . Para obtener una lista de formatos compatibles, vaya a la sección sobre el formato de salida del registro de control. |
-D, --dividers |
Impresión de separadores entre cada búfer de registro. |
-c |
Flush (claro), la totalidad de registro y salida. |
-t <count> |
Imprimir sólo el más reciente número de líneas. Esta opción incluye la funcionalidad -d . |
-t '<time>'
|
Imprima las líneas más recientes desde la hora especificada. Esta opción incluye la funcionalidad -d . Consulte la opción-P para obtener información sobre los parámetros de entrecomillado con espacios incrustados.
adb logcat -t '01-26 20:52:41.820' |
-T <count> |
Imprimir el más reciente número de líneas desde el tiempo especificado. Esta opción no incluye -d funcionalidad |
-T '<time>' |
Impresión de la más reciente de las líneas desde el tiempo especificado. Esta opción no incluye la funcionalidad include -d . Consulte la opción-P para obtener información sobre los parámetros de entrecomillado con espacios incrustados.
adb logcat -t '01-26 20:52:41.820' |
-L, -last |
Volcado de los registros antes del último reinicio. |
-B, --binary |
Salida del registro en el sistema binario. |
-S, --statistics |
Incluir estadísticas en la salida para ayudarle a identificar y seleccionar el registro de los spammers. |
-G <size> |
Establece el tamaño del registro de búfer de anillo. Puede agregar K o M al final para indicar kilobytes o megabytes. |
-p, --prune |
Print (leer) el actual permitir (white ) y negar (black ) listas y no toma argumentos, de la siguiente manera:
adb logcat -p |
-P '<list> ...' |
Escribir (set) permitir (white ) y negar (black ) listas para ajustar el registro de contenido para un propósito específico. Proporciona un contenido mixto de entradas de lista permitidas (<white> ) y denegadas (~<black> ), donde <white> o <black> puede ser un UID, UID/PID o /PID. Con la orientación de las estadísticas de logcat (logcat -S ), se pueden considerar ajustes en las listas allow (white ) y deny (black ) para fines como:
De forma predeterminada, el sistema de registro evita automáticamente al peor delincuente en las estadísticas de registro de forma dinámica para hacer espacio para nuevos mensajes de registro. Una vez agotada la heurística, el sistema poda las entradas más antiguas para hacer espacio para los nuevos mensajes. Agregar un allowlist ( Cita $ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>' El siguiente ejemplo se especifica que ( adb logcat -P '"/32676 675 ~/32677 897"' Otros permitir ( ~! worst uid blacklist~1000/! worst pid in system (1000) |
--pid=<pid> ... |
Solo imprime registros del PID dado. |
--wrap |
Dormir durante 2 horas o cuando el buffer esté a punto de terminar, lo que ocurra primero. Mejora la eficiencia del sondeo al proporcionar un despertar a punto de envolver. |
Salida de registro de filtrado
- La etiqueta de un mensaje de registro es una cadena corta que indica el componente del sistema desde el que se origina el mensaje (por ejemplo, «View» para el sistema view).
- La prioridad es uno de los siguientes valores de carácter, ordenadas de menor a mayor prioridad:
-
-
V
: Verbose (prioridad más baja) -
D
: Debug -
I
Info -
W
: Advertencia -
E
: Error -
F
: Fatal -
S
: Silencioso (prioridad máxima, en la que nunca se imprime nada)
-
Puede obtener una lista de etiquetas utilizadas en el sistema, con prioridades, ejecutando logcat y observando las dos primeras columnas de cada mensaje, dadas como <priority>/<tag>
.
El siguiente es un ejemplo de breve salida logcat obtenida con el comando logcat -v brief output
. Muestra que el mensaje se relaciona con el nivel de prioridad » I «y la etiqueta «ActivityManager»:
I/ActivityManager( 585): Starting activity: Intent { action=android.intent.action...}
Para reducir la salida de registro a un nivel manejable, puede restringir la salida de registro mediante expresiones de filtro. Las expresiones de filtro le permiten indicar al sistema las etiquetas-combinaciones de prioridades que le interesan – el sistema suprime otros mensajes para las etiquetas especificadas.
Una expresión de filtro sigue este formato tag:priority ...
, donde tag
indica la etiqueta de interés y priority
indica el mínimo nivel de prioridad del informe de dicha etiqueta. Los mensajes para esa etiqueta en o por encima de la prioridad especificada se escriben en el registro. Puede suministrar cualquier número de especificaciones tag:priority
en una sola expresión de filtro. La serie de especificaciones está delimitada por espacios en blanco.
Este es un ejemplo de una expresión de filtro que suprime todos los mensajes de registro excepto los que tienen la etiqueta «ActivityManager», con prioridad» Info «o superior, y todos los mensajes de registro con etiqueta «MyApp», con prioridad «Debug» o superior:
adb logcat ActivityManager:I MyApp:D *:S
El elemento final de la expresión anterior, *:S
, establece el nivel de prioridad para todas las etiquetas en «silencioso», asegurando así que solo se muestren los mensajes de registro con «ActivityManager» y «MyApp». Usar *:S
es una excelente manera de asegurarse de que la salida de registro esté restringida a los filtros que ha especificado explícitamente: permite que sus filtros sirvan como una lista completa para la salida de registro.
La siguiente expresión de filtro muestra todos los mensajes de registro con nivel de prioridad «advertencia» y superior, en todas las etiquetas:
adb logcat *:W
Si está ejecutando logcat desde su equipo de desarrollo (en lugar de ejecutarlo en un shell adb remoto), también puede establecer una expresión de filtro predeterminada exportando un valor para la variable de entorno ANDROID_LOG_TAGS
:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
Tenga en cuenta que ANDROID_LOG_TAGS
no se exporta a la instancia del emulador/dispositivo, si ejecuta logcat desde un shell remoto o utiliza adb shell logcat
.
Formato de salida de registro de control
Los mensajes de registro contienen una serie de campos de metadatos, además de la etiqueta y la prioridad. Puede modificar el formato de salida de los mensajes para que muestren un campo de metadatos específico. Para ello, utilice la opción -v
y especifique uno de los formatos de salida admitidos que se enumeran a continuación.
-
brief
: Muestra la prioridad, la etiqueta y el PID del proceso que emite el mensaje. -
long
: Muestra todos los campos de metadatos y mensajes separados con líneas en blanco. -
process
: Mostrar solo el PID. -
raw
: Muestra el mensaje de registro sin procesar sin otros campos de metadatos. -
tag
: Muestra la prioridad y la etiqueta. -
thread:
Un formato heredado que muestra la prioridad, el PID y el TID del hilo que emite el mensaje. -
threadtime
(predeterminado): Muestra la fecha, la hora de invocación, la prioridad, la etiqueta, el PID y el TID del hilo que emite el mensaje. -
time
: Muestra la fecha, la hora de invocación, la prioridad, la etiqueta y el PID del proceso que emite el mensaje.
Al iniciar logcat, puede especificar el formato de salida que desee utilizando la opción -v
:
logcat
Este es un ejemplo que muestra cómo generar mensajes en thread
formato de salida:
adb logcat -v thread
Tenga en cuenta que solo puede especificar un formato de salida con la opción -v
, pero puede especificar tantos modificadores que tengan sentido. Logcat ignora los modificadores que no tienen sentido.Modificadores de formato
Modificadores de formato
Los modificadores de formato cambian la salida logcat en términos de cualquier combinación de uno o más de los siguientes modificadores. Para especificar un modificador de formato, utilice la opción -v
, de la siguiente manera:
adb logcat -b all -v color -d
Cada mensaje de registro de Android tiene una etiqueta y una prioridad asociadas. Puede combinar cualquier modificador de formato con cualquiera de las siguientes opciones de formato: brief
long
process
raw
tag
thread
threadtime
, and time
.
You can get the format modifier details by typing logcat -v --help
at the command line.
-
color
: Show each priority level with a different color. -
descriptive
: Show log buffer event descriptions. Este modificador solo afecta a los mensajes del búfer de registro de eventos y no tiene efecto en los otros búferes no binarios. Las descripciones de eventos provienen de la base de datos event-log-tags. -
epoch
: Tiempo de visualización en segundos a partir del 1 de enero de 1970. -
monotonic
: Tiempo de visualización en segundos de CPU a partir del último arranque. -
printable
: Asegúrese de que cualquier contenido de registro binario esté escapado. -
uid
: Si los controles de acceso lo permiten, muestra el UID o el ID de Android del proceso registrado. -
usec
: Muestra el tiempo con precisión de hasta microsegundos. -
UTC
: Muestra la hora como UTC. -
year
: Agregue el año a la hora mostrada. -
zone
: Agregue la zona horaria local a la hora mostrada.
Visualización de búferes de registro alternativos
El sistema de registro de Android mantiene varios búferes circulares para los mensajes de registro, y no todos los mensajes de registro se envían al búfer circular predeterminado. Para ver mensajes de registro adicionales, puede ejecutar el comando logcat
con la opción -b
, para solicitar la visualización de un búfer circular alternativo. Puede ver cualquiera de estos búferes alternativos:
-
radio
: Ver el búfer que contiene mensajes relacionados con radio/telefonía. -
events
: Ver los mensajes interpretados del búfer de eventos del sistema binario. -
main
: Ver el búfer de registro principal (predeterminado) no contiene mensajes de registro de fallos y del sistema. -
system
: Ver el búfer de registro del sistema (predeterminado). -
crash
: Ver el búfer de registro de fallos (predeterminado). -
all
: Ver todos los búferes. -
default
: Informesmain
system
ycrash
búferes.
El uso de la opción-b
es:
logcat
Este es un ejemplo de cómo ver un búfer de registro que contiene mensajes de radio y telefonía:
adb logcat -b radio
También puede especificar varias banderas -b
para todos los búferes que desee imprimir, de la siguiente manera:
logcat -b main -b radio -b events
Puede especificar una sola bandera -b
con una lista de búferes separados por comas, por ejemplo:
logcat -b main,radio,events
Registro desde código
La clase Log
le permite crear entradas de registro en su código que se muestran en la herramienta logcat. Los métodos de registro comunes incluyen:
-
Log.v(String, String)
(verbose) -
Log.d(String, String)
(debug) -
Log.i(String, String)
(information) -
Log.w(String, String)
(warning) -
Log.e(String, String)
(error)
For example, using the following call:
Kotlin
Log.i("MyActivity", "MyClass.getView() — get item number $position")
Java
Log.i("MyActivity", "MyClass.getView() — get item number " + position);
The logcat outputs something like:
I/MyActivity( 1557): MyClass.getView() — get item number 1