Logcat es una herramienta del Android SDK para ver mensajes del sistema y registros de aplicaciones en tiempo real, disponible a través de ADB o la consola integrada de Android Studio. Según Android Developers, Logcat recopila mensajes de todos los procesos del sistema, los filtra por niveles de prioridad y etiquetas, y permite al desarrollador diagnosticar errores, rastrear la ejecución del código y analizar el rendimiento. Logcat es la fuente principal de información al depurar aplicaciones Android.
Puntos clave
Logcat es un búfer del sistema Android donde todos los procesos (incluyendo el kernel de Linux, system_server y las aplicaciones) escriben mensajes con un formato específico. La herramienta logcat, incluida en el Android SDK, lee este búfer y muestra los mensajes en tiempo real. A partir de Android 4.1 (API 16), el acceso a Logcat está restringido: las aplicaciones solo pueden leer sus propios logs, y los logs del sistema son accesibles a través de ADB con acceso de depuración.
Cada mensaje Logcat contiene cinco campos: fecha y hora, PID (identificador de proceso), TID (identificador de hilo), nivel de log y etiqueta. El formato es fijo e idéntico en todas las versiones de Android. Esto permite usar las utilidades grep, awk y sed para filtrar logs en pipelines CI/CD sin depender del IDE.
Los logs se almacenan en un búfer circular de tamaño fijo: 256 KB para main, 256 KB para system y 256 KB para events (Android 5+). Cuando el búfer se desborda, los mensajes antiguos se eliminan. El desarrollador puede cambiar el tamaño del búfer mediante la propiedad PROP logcat.size o en las opciones de desarrollador del dispositivo.
Seis niveles de logging determinan la importancia del mensaje. Android utiliza niveles estándar similares a otras plataformas pero con sus propios nombres de constantes en la clase Log. Elegir el nivel correcto ayuda a filtrar los logs de manera eficiente y evitar que los mensajes críticos se pierdan entre los secundarios.
| Nivel | Constante | Propósito | Mostrado por defecto |
|---|---|---|---|
| VERBOSE | Log.v | Información de depuración máximamente detallada | No |
| DEBUG | Log.d | Mensajes de depuración para el desarrollador | No |
| INFO | Log.i | Mensajes informativos sobre el funcionamiento de la aplicación | Sí |
| WARN | Log.w | Advertencias sobre problemas potenciales | Sí |
| ERROR | Log.e | Errores críticos y excepciones | Sí |
| ASSERT | Log.wtf | Errores que no deberían ocurrir nunca | Sí |
La etiqueta (tag) es una cadena de hasta 23 caracteres que identifica la fuente del mensaje. Se recomienda usar el nombre de la clase o del módulo como etiqueta: MainActivity, AuthManager, NetworkModule. Esto permite filtrar logs por un componente específico de la aplicación. Para mantener la uniformidad en el equipo, se pueden crear constantes de etiquetas en un archivo separado o usar la biblioteca Timber, que inserta automáticamente la etiqueta según el nombre de la clase.
Cuando ocurre una excepción no controlada, Android escribe automáticamente el stack trace completo en Logcat, indicando la clase, el método, la línea de código y la cadena de llamadas. El log de crash contiene el tipo de excepción (NullPointerException, RuntimeException), el mensaje y la secuencia de llamadas desde el punto del fallo hasta el punto de entrada de la aplicación. Para analizar logs de crash de dispositivos de usuarios se utiliza Firebase Crashlytics, que sincroniza el stack trace con el mapa de ofuscación (mapping.txt para Android).
Android Studio proporciona una interfaz gráfica de Logcat accesible a través de View → Tool Windows → Logcat (Alt + 6). La ventana Logcat se actualiza en tiempo real, muestra todos los mensajes del dispositivo conectado y permite configurar filtros flexibles para aislar la información deseada del flujo general.
La lista desplegable Log Level filtra los mensajes por nivel mínimo: seleccione WARN para ver solo advertencias y errores, ocultando VERBOSE, DEBUG e INFO. El campo Search permite buscar por texto del mensaje o etiqueta — se admiten expresiones regulares, lo que resulta útil para encontrar mensajes por patrón.
Los Saved Filters son una potente función de Logcat en Android Studio. Puede crear un filtro que muestre solo los mensajes con la etiqueta de su aplicación (tag:MyApp) y nivel WARN+. Los filtros se conservan entre sesiones y están disponibles en la lista desplegable. Para proyectos con varios módulos, cree un filtro separado para cada módulo.
# Expresión de ejemplo para filtrar logs de la aplicación
tag:"MyApp" level:WARN # Solo WARN+ para MyApp
package:"com.mycompany" # Todos los logs del paquete
-tag:"okhttp" # Excluir logs de OkHttp
Los logs de Logcat se pueden exportar a un archivo de texto mediante el icono Save to File. Esto es útil para adjuntarlos a tickets en Jira o analizar sesiones largas. El log exportado se puede abrir en cualquier editor de texto y aplicar grep para buscar patrones. Para una visualización formateada, use la utilidad logcat-color.
ADB logcat es la versión de consola de Logcat, accesible a través de Android Debug Bridge. Su principal ventaja es la posibilidad de ejecutarse en servidores CI, en scripts de automatización y en dispositivos sin Android Studio. ADB logcat admite todos los mismos filtros que la interfaz gráfica, pero con la flexibilidad de la línea de comandos.
El comando adb logcat sin argumentos muestra todo el búfer en tiempo real. Use Ctrl+C para detenerlo. El indicador -c limpia el búfer antes de comenzar la grabación — es útil cuando necesita aislar los logs de la prueba actual de los mensajes anteriores. El indicador -b selecciona el tipo de búfer: main, system, events, crash (Android 12+).
# Limpiar el búfer e iniciar el registro con la etiqueta MyApp
adb logcat -c
adb logcat MyApp:D *:S
# Guardar logs en archivo
adb logcat -d > logcat_dump.txt
# Filtrado por PID del proceso
adb logcat --pid=12345
Combinar ADB con utilidades Unix ofrece la máxima flexibilidad. Por ejemplo, el filtro "*:S TAG:D" muestra solo los mensajes con la etiqueta TAG de nivel DEBUG y superior, ocultando todos los demás. Para ver solo excepciones, use grep -i exception. Para analizar la frecuencia de errores, aplique sort | uniq -c en la columna de etiqueta.
En servidores CI, Logcat se utiliza para recopilar diagnósticos durante la ejecución de pruebas de UI. Un pipeline típico: limpiar el búfer antes de ejecutar las pruebas, guardar el volcado de logs como artefacto de compilación después de la ejecución. Si una prueba falla, los logs pueden determinar si el fallo fue causado por ANR, una excepción no controlada o un timeout de red.
La clase android.util.Log es la API integrada para escribir mensajes en Logcat. Log.v, Log.d, Log.i, Log.w, Log.e y Log.wtf aceptan una etiqueta (cadena) y un mensaje (cadena) o un mensaje + Throwable. Para formatear mensajes, use String.format o las plantillas de cadena de Kotlin — evite la concatenación de cadenas, que crea objetos innecesarios en el heap.
Timber es una biblioteca popular de Jake Wharton que elimina las deficiencias de la API Log integrada. Timber inserta automáticamente la etiqueta según el nombre de la clase que realizó el logging y no requiere pasar una etiqueta en cada llamada. Timber también admite logging condicional: en compilaciones Release, las llamadas Timber.v y Timber.d se pueden desactivar con una sola línea en Application.onCreate.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// API de Log integrada
Log.d("MainActivity", "onCreate called")
// Timber — etiqueta automática por nombre de clase
Timber.d("onCreate called")
}
private fun loadData() {
try {
val result = fetchFromNetwork()
Timber.i("Data loaded: $result")
} catch (e: IOException) {
Timber.e(e, "Failed to load data")
}
}
}
En compilaciones Release se recomienda desactivar los logs VERBOSE y DEBUG para reducir la carga del búfer Logcat y evitar la fuga de información sensible. Timber resuelve este problema mediante PlantingTree: en la variante Debug se planta DebugTree (registra todo), en Release — CrashReportingTree (registra solo ERROR a través de Crashlytics). La API Log integrada no admite logging condicional — el desarrollador debe envolver cada llamada con if (BuildConfig.DEBUG).
Preguntas frecuentes
Use el comando adb logcat -c antes de ejecutar una prueba. Alternativamente, en Android Studio haga clic en el botón Clear Logcat (papelera) en la ventana Logcat. La limpieza no afecta a los búferes del sistema de otros procesos, solo a la conexión actual.
Ejecute adb logcat -G 2M para aumentar el búfer a 2 MB. El tamaño máximo depende del dispositivo: en Android 10+ hay disponible hasta 16 MB. El cambio se mantiene hasta que se reinicie el dispositivo. Para una configuración permanente, use build.prop en el device tree.
Posibles causas: la aplicación se ejecuta en modo Release (logs Timber.v/d desactivados), el filtro de Logcat oculta el nivel necesario, o está conectado al dispositivo incorrecto. También verifique que haya seleccionado el proceso de su aplicación en Android Studio, no system_process.
Busque la línea con FATAL EXCEPTION, debajo de la cual viene el stack trace completo. La primera línea contiene el tipo de excepción y el mensaje, las líneas siguientes contienen la cadena de llamadas con el archivo y la línea de código. Use grep "FATAL EXCEPTION" para una búsqueda rápida entre todos los logs.
ANR (Application Not Responding) es una situación en la que el hilo principal (UI thread) está bloqueado durante más de 5 segundos. En Logcat, ANR aparece como un mensaje con la etiqueta ActivityManager y el texto "ANR in ..." con el stack trace adjunto de todos los hilos. Use el filtro tag:ActivityManager level:ERROR.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también