Use Timber for Android Logging

Why use Timber?

  • Don't need to declare TAG anymore, as it will automatically use the current class name as TAG.
  • You can redirect log output (e.g. log everything to logcat during debug, and log error to Crashlytics in release build).

Timber Setup

implementation 'com.jakewharton.timber:timber:4.7.1'
import;import timber.log.Timberimport timber.log.Timber.DebugTree/** A tree which logs important information for crash reporting.  */class CrashReportingTree: Timber.Tree() {    override fun isLoggable(tag: String?, priority: Int): Boolean {        return priority >= Log.INFO    }    override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {        if (priority == Log.VERBOSE || priority == Log.DEBUG) {            return        }        // CrashAnaytics doSomething        /*        Crashlytics.log(priority, tag, message);        if (t != null) {            if (priority == Log.ERROR) {                Crashlytics.logException(t);            }        }        */    }}public class LuaApp : Application {    override fun onCreate() {        if (BuildConfig.DEBUG) {            Timber.plant(DebugTree())        } else {            Timber.plant(CrashReportingTree())        }    }}


Debug logging with string formatting (Kotlin)

Timber.d("Hello, $name")

Debug logging with string formatting (Java)

Timber.d("Hello, %s", name);

Use custom tag


Exception logging

try {}catch (e: Exception) {  // e.printStackTrace()  Timber.e(e)}

Log exception with message

try {}catch (e: Exception) {  Timber.w(e, "Add failure")}


❤️ Is this article helpful?

Buy me a coffee ☕ or support my work via PayPal to keep this space 🖖 and ad-free.

Do send some 💖 to @d_luaz or share this article.

✨ By Desmond Lua

A dream boy who enjoys making apps, travelling and making youtube videos. Follow me on @d_luaz

👶 Apps I built

Travelopy - discover travel places in Malaysia, Singapore, Taiwan, Japan.