Android: log con Timber

Android: log con Timber

En entradas anteriores, como por ejemplo en Anatomía de una app básica y en Fundamentos de Android: Interacción del usuario, ya hemos visto el uso de la clase Log para ver el historial de log o registro de eventos o acciones en una aplicación. Por ejemplo, para comprobar el estado Created dentro del ciclo de vida de la actividad de una aplicación, dentro del método onCreate podemos incluir:
// requiere import android.util.Log
Log.i("MainActivity", "Activity Status: Created")
En la clase Log tenemos tres elementos:
  1. i que significa que se trata de un menseje de carácter informativo (también puede ser, entre otras opciones, e para errores o w para advertencias o warnings),
  2. el primer parámetro que es una etiqueta o tag que nos sirve para localizar más fácilmente los mensajes y en muchas ocasiones suele ser el nombre de la clase, y
  3. el segundo parámetro que contiene el mensaje.
Después podemos hacer un seguimiento de este log a través de la pestaña Logcat, y para encontrarlo más fácilmente podemos filtrar nuestro mensaje dentro de los múltiples mensajes del Logcat escribiendo I/MainActivity en el campo de búsqueda.

Una alternativa al uso de la clase Log es la biblioteca Timber, que es una biblioteca de código abierto desarrollada por Jake Wharton que proporciona funciones adicionales de registro, con ciertas ventajas sobre la clase integrada Log, como que genera automáticamente la etiqueta según el nombre de la clase, ayuda a evitar mostrar registros en una versión de lanzamiento o permite la integración con bibliotecas de informes de fallos.

Para utilizar Timber debemos añadirlo a Gradle. Concretamente en el archivo build.gradle (Module: app), en la sección de dependencias debemos añadir:
dependencies {
   ...
   implementation 'com.jakewharton.timber:timber:4.7.1'
}
Ten en cuenta que el número de versión puede cambiar, por lo que debes comprobarlo en el la web del proyecto en GitHub (el número de versión se muestra bajo el encabezado Download).

La implementación de DebugTree determinará automáticamente desde qué clase se está llamando y usará ese nombre de clase como etiqueta:
Timber.plant(Timber.DebugTree())
Aunque podemos hacer esta implementación en el método onCreate, suele ser recomendable hacerla dentro de otra clase de la aplicación (como una subclase de Application) e incluir esta clase en el archivo AndroidManifest.xml. Por ejemplo (código extraído de Android Kotlin Fundamentals Course):
//ClickerApplication.kt
package com.example.android.dessertclicker

import android.app.Application
import timber.log.Timber

class ClickerApplication: Application() {

    override fun onCreate() {
        super.onCreate()

        Timber.plant(Timber.DebugTree())
    }
}
Y en el archivo AndroidManifest.xml, en la parte superior del elemento application añadimos:
<application
   android:name=".ClickerApplication"
...
Ahora ya podemos sustituir la clase Log por Timber de esta manera:
// requiere import timber.log.Timber
// ya no se requiere import android.util.Log
// Log.i("MainActivity", "Activity Status: Created")
Timber.i("Activity Status: Created")
Y comprobamos en Logcat que aparece el mensaje (en el campo de búsqueda podemos escribir simplemente el nombre de la actividad, por ejemplo MainActivity).

Comentarios

Entradas populares

Recursos gratis para aprender Kotlin

I/O: entrada y salida de datos en consola

Lectura y escritura de archivos