Maybaygiare.org

Blog Network

Herramienta de línea de comandos Logcat

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 VERBOSEDEBUGINFOWARNINGERROR 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:

  1. 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.
  2. Filtrado de propiedades del sistema: liblogconsulta un conjunto de propiedades del sistema para determinar el nivel de gravedad mínimo que se enviará a logd. Si los registros tienen la etiqueta MyApp, las siguientes propiedades son revisados, y se espera que contienen la primera letra de la gravedad mínima (VDIWE o S desactivar todos los registros):
  • log.tag.MyApp
  • persist.log.tag.MyApp
  • log.tag
  • persist.log.tag
  • filtrado de Aplicaciones: Si no se establece ninguna de las propiedades, liblog utiliza la prioridad mínima establecida por __android_log_set_minimum_priority. La configuración predeterminada es INFO.
  • Filtrado de pantalla: adb logcatadmite 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 mainsystem 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 mainsystem 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 --regexy --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> ...'
    --prune '<list> ...' -P '<white_and_black_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:

    • Dar la mayor longevidad al contenido de registro específico a través de selecciones UID.
    • Evite que alguien (UID) o algo (PID) consuma estos recursos para ayudar a aumentar el logspan para que pueda tener más visibilidad de los problemas que está diagnosticando.

    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 (whitelist) protege tu número de identificación de Android (AID), que se convierte en el AID y el GID de los procesos para que no se declare delincuente, y agregar un denilist ayuda a liberar espacio antes de que se consideren los peores delincuentes. Puede elegir qué tan activa está la poda, y puede desactivar la poda para que solo elimine el contenido de las entradas más antiguas de cada búfer de registro.

    Cita

    adb logcat no preservar la cita, por lo que la sintaxis para especificar permitir (white) y negar (black) listas es la siguiente:

    $ adb logcat -P '"<white_and_blacklist>"'oradb shell$ logcat -P '<white_and_blacklist>'

    El siguiente ejemplo se especifica que (white) lista con PID 32676 y UID 675, y negar (black) lista con PID 32677 UID y 897. La PID 32677 en el denilist se pondera para una poda más rápida.

    adb logcat -P '"/32676 675 ~/32677 897"'

    Otros permitir (white) y denegar (black) las variaciones de comandos de lista que puede usar son las siguientes:

    ~! 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: brieflongprocessrawtagthreadthreadtime, 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: Informes mainsystem y crash 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

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada.