¿ Cómo aumento el tamaño de /dev/log/main
por 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/main
por un factor de 10 si es posible.
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.
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
/ pull
registro) y en userdebug
las compilaciones "kernel" (para klogd
) y "stats" (para estadísticas de registros) se agregaron más tarde. logd
cubre 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 ). logcat
El comando lee los búferes /dev/socket/logdr
mientras controla el daemon y los búferes a través /dev/socket/logd
del zócalo. Use -g
/ -G
options 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.size
se lee desde /data/property/
el cual no está disponible a menos /data
que 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.prop
o directamente en algún *.rc
archivo) antes de que logd
se inicie el servicio.
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.
kevin m
adb logcat > my_log_file.log
la ejecución no es una opción?