Timber para Kotlin: guía completa con ejemplos prácticos
1. ¿Qué es Timber y por qué usarlo?
Timber es una librería ligera de logging para aplicaciones Android, escrita en Kotlin. Fue creada por Jake Wharton, uno de los desarrolladores Android más influyentes, conocido por proyectos como Retrofit, OkHttp y Dagger. El objetivo principal de Timber es eliminar el código repetitivo al hacer logging y ofrecer un mecanismo flexible para gestionar los registros en diferentes etapas del desarrollo.
¿Para qué usar Timber si ya existe android.util.Log? Primero, Timber añade automáticamente el nombre de la clase y el método en cada log, facilitando enormemente la trazabilidad. Ya no necesitas escribir Log.d(TAG, "mensaje") — basta con llamar a Timber.d("mensaje"). Segundo, Timber incorpora un sistema de "árboles" (Trees) que permite dividir los logs en diferentes canales: por ejemplo, en la compilación debug mostrar todo en Logcat, y en la compilación release enviar solo errores a Crashlytics u otro servicio de análisis.
Una tercera ventaja clave es que Timber desactiva automáticamente todos los logs en la compilación release si no has configurado un árbol especial para producción. Esto no solo mejora el rendimiento, sino que también evita la filtración de datos sensibles a través de los logs. La librería es tan popular que se usa en miles de proyectos comerciales y es recomendada por Google en las guías oficiales de desarrollo Android.
2. Instalación
Timber se distribuye a través de Maven Central. Para instalarlo, agrega la dependencia en tu archivo build.gradle (nivel de módulo):
dependencies {
implementation 'com.jakewharton.timber:timber:5.0.1'
}
Si usas Kotlin DSL (build.gradle.kts):
dependencies {
implementation("com.jakewharton.timber:timber:5.0.1")
}
Después de sincronizar Gradle, la librería está lista para usar. Nota: Timber no requiere permisos adicionales en AndroidManifest.xml.
3. Inicio rápido — ejemplo mínimo funcional
Para empezar, necesitas "plantar un árbol" (plant a tree) — registrar un manejador de logs. La forma más sencilla es usar el árbol incorporado Timber.DebugTree, que muestra los logs en Logcat con nivel DEBUG o superior:
import timber.log.Timber
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
}
}
Ahora puedes escribir logs desde cualquier parte de la aplicación:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Timber.d("Actividad creada")
Timber.i("El usuario abrió la pantalla principal")
Timber.w("Algo sospechoso ocurrió")
Timber.e("Error ocurrido: %s", "Tiempo de espera de red agotado")
}
}
En Logcat verás algo como esto:
D/MainActivity: Actividad creada
I/MainActivity: El usuario abrió la pantalla principal
W/MainActivity: Algo sospechoso ocurrió
E/MainActivity: Error ocurrido: Tiempo de espera de red agotado
Observa que Timber detectó automáticamente el nombre de la clase (MainActivity) y lo añadió como etiqueta. Ya no necesitas crear manualmente una constante TAG.
4. Métodos, funciones y clases principales
4.1. Timber.d() — Logging de depuración
Firma: fun d(message: String, vararg args: Any?)
Qué hace: Muestra un mensaje de depuración con nivel DEBUG. Se usa para logs temporales durante el desarrollo. En la compilación release no se muestra por defecto.
Timber. También en la biblioteca
Caching en Node.js: Redis y alternativas para acelerar aplicaciones
Chalk para JavaScript (Node.js): guía completa con ejemplos
Trabajo con CSV en Swift (iOS/macOS): librería SwiftCSV y fundamentos de parsing
ORM para Kotlin: Exposed vs Ktor vs Ktorm — comparación y ejemplos