¿Cómo puedo aumentar el tamaño de los búferes logcat?

¿ Cómo aumento el tamaño de /dev/log/mainpor un factor de 10? Tengo entendido que el registro tiene un tamaño fijo (¿16 K?) y se reinvierte cuando se alcanza ese límite. Me gustaría saber cuál es el tamaño de registro establecido actualmente y aumentarlo mucho.

Estoy depurando un problema que ocurre con poca frecuencia cuando el dispositivo no se ha utilizado durante un largo período de tiempo (¿quizás una hora?). Instrumenté el código con mensajes de registro para poder entender qué sucede cuando ocurre el error.

Mi problema es que mi instrumentación hace que el registro se desplace en aproximadamente 2 minutos. Me gustaría aumentar el tamaño de dev/log/mainpor un factor de 10 si es posible.

¿Supongo que dejarlo conectado a la computadora con adb logcat > my_log_file.logla ejecución no es una opción?

Respuestas (3)

Para averiguar el tamaño real del búfer de anillo, puede utilizar

$ adb logcat -g

Para ajustar el tamaño del búfer de anillo, puede intentar

$ adb logcat -r <kbytes>

Al menos eso es lo que dicen algunos tutoriales. Para obtener más detalles, es posible que desee leer las opciones de comando y los búferes de registro "adb logcat" .

PD: Supongo que esas configuraciones (tamaño de búfer de anillo ajustado manualmente) no sobrevivirán a un reinicio, solo para considerar.

en realidad, debe ser adb logcat -r 100000 -f sdcard/log.log . -f es necesario.
No creo que -r sea útil ya que al leer el manual de logcat, establecerá el tamaño en el que la herramienta logcat rotará el archivo que está escribiendo usando la opción "-f" y NO el tamaño del anillo en memoria búfer utilizado por el módulo del kernel registrador!

A partir de Android 5, el controlador de registrador en el kernel está obsoleto , lo que expuso los búferes de anillo a través de /dev/log/*dispositivos de caracteres. En su lugar, un demonio de registro de espacio de usuario llamado logd administra los búferes "principal", "sistema", "radio", "eventos" y "bloqueo". Los búferes opcionales de "seguridad" (por ejemplo, para adb shell/ push/ pullregistro) y en userdebuglas compilaciones "kernel" (para klogd) y "stats" (para estadísticas de registros) se agregaron más tarde. logdcubre principalmente la funcionalidad de su contraparte de escritorio syslogd , pero también incluye klogd y parcialmente auditd para obtener registros del subsistema SELinux del kernel. El comportamiento del demonio de registro se controla a través de diferentespropiedades _

Las aplicaciones y los procesos nativos escriben sus registros en los búferes relevantes a través del socket /dev/socket/logdw(mediante el uso de las funciones de liblog ). logcatEl comando lee los búferes /dev/socket/logdrmientras controla el daemon y los búferes a través /dev/socket/logddel zócalo. Use -g/ -Goptions para obtener y establecer el tamaño de los búferes individuales:

  -g, --buffer-size
                  Get the size of the ring buffer.
  -G <size>, --buffer-size=<size>
                  Set size of log ring buffer, may suffix with K or M.

También hay una opción en Opciones de desarrollador: Tamaños de búfer del registrador (que también establece la propiedad persist.logd.size) para establecer el mismo tamaño para todos los búferes.

persist.logd.sizese lee desde /data/property/el cual no está disponible a menos /dataque esté montado y descifrado (en el caso de FDE). Pero a veces los búferes pueden desbordarse incluso antes de eso, por lo que la solución es configurar ro.logd.size(a través de default.prop/ build.propo directamente en algún *.rcarchivo) antes de que logdse inicie el servicio.

¡Muchas gracias por ese consejo sobre cómo aumentar el tamaño del búfer de forma persistente entre arranques! Fue muy útil al depurar un error de tiempo que ocurrió antes de que pudiera ajustar el tamaño.

Si desea cambiar el tamaño predeterminado de un búfer de registro para que persista entre reinicios, puede volver a compilar el kernel con tamaños de búfer actualizados.

El archivo que contiene las definiciones del búfer de registro es:

<kernel>/drivers/staging/android/logger.c

Las versiones que estoy viendo usan una macro para definir búferes de registro en ese archivo:

DEFINE_LOGGER_DEVICE(variable, name, size)

Probablemente habrá varios registradores; "principal" suele ser el que está buscando.

¡Esto debe saberse en todas las preguntas relacionadas aquí y en stackoverflow! Buen hallazgo Cabe destacar que Main y System son los búfer de logcat predeterminados. Probablemente quieras aumentarlos a ambos. Bueno, dependiendo de si tu versión de Android los usa. Ver logcat -g y logcat -h