Timber para Kotlin: guia completo com exemplos práticos
1. O que é e para que serve
Timber é uma biblioteca leve para logging em aplicativos Android, escrita em Kotlin. Foi criada por Jake Wharton — um dos principais desenvolvedores Android, conhecido por projetos como Retrofit, OkHttp e Dagger. O principal objetivo do Timber é eliminar o código repetitivo (boilerplate) ao fazer logging e fornecer um mecanismo flexível para gerenciar logs em diferentes fases do desenvolvimento.
Por que usar Timber se já existe o android.util.Log padrão? Primeiro, o Timber adiciona automaticamente o nome da classe e do método em cada log, tornando a depuração muito mais fácil. Você não precisa mais escrever Log.d(TAG, "mensagem") — basta chamar Timber.d("mensagem"). Segundo, o Timber oferece um sistema de "árvores" (Trees) que permite separar logs em diferentes canais: por exemplo, na versão de debug exibir tudo no Logcat, e na versão de release enviar apenas erros para o Crashlytics ou outro serviço de análise.
Uma terceira vantagem importante: o Timber desativa automaticamente todos os logs na versão de release, a menos que você configure uma árvore especial para produção. Isso não só melhora o desempenho, mas também evita vazamento de dados sensíveis através dos logs. A biblioteca é tão popular que é usada em milhares de projetos comerciais e é recomendada pelo Google nos guias oficiais de desenvolvimento Android.
2. Instalação
O Timber é distribuído via Maven Central. Para instalar, adicione a dependência no arquivo build.gradle (nível do módulo):
dependencies {
implementation 'com.jakewharton.timber:timber:5.0.1'
}
Se você usa Kotlin DSL (build.gradle.kts):
dependencies {
implementation("com.jakewharton.timber:timber:5.0.1")
}
Após sincronizar o Gradle, a biblioteca está pronta para uso. Observação: o Timber não requer permissões adicionais no AndroidManifest.xml.
3. Início rápido — exemplo mínimo funcional
Para começar, é necessário "plantar uma árvore" (plant a tree) — registrar um manipulador de logs. A maneira mais simples é usar a árvore embutida Timber.DebugTree, que exibe logs no Logcat com nível DEBUG ou superior:
import timber.log.Timber
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
}
}
Agora, em qualquer lugar do aplicativo, você pode escrever logs:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Timber.d("Activity criada")
Timber.i("Usuário abriu a tela principal")
Timber.w("Algo suspeito aconteceu")
Timber.e("Erro ocorrido: %s", "Timeout de rede")
}
}
No Logcat, você verá algo como:
D/MainActivity: Activity criada
I/MainActivity: Usuário abriu a tela principal
W/MainActivity: Algo suspeito aconteceu
E/MainActivity: Erro ocorrido: Timeout de rede
Observe: o Timber identificou automaticamente o nome da classe (MainActivity) e o adicionou à tag. Você não precisa criar manualmente uma constante TAG.
4. Métodos/funções/classes principais
4.1. Timber.d() — Log de depuração (Debug)
Assinatura: fun d(message: String, vararg args: Any?)
O que faz: Exibe uma mensagem de depuração com nível DEBUG. Usado para logs temporários durante o desenvolvimento. Na versão de release, por padrão, não é exibido.
Timber.