本文同步發表在 HackMD & Medium

Timber 是什麼

Timber 是一個以 Android Log 為基底所開發的 Logger Library,由 Jake Wharton 大神所開發。

Timber 為了解決什麼問題

1. 開發時可以留著,但發佈版本需要移除 Log

1
2
3
4
// 你可能很常看到類似這樣的寫法...
if (BuildConfig.DEBUG) {
    Log.d(TAG, "Hello World!")
}

一般來說在開發上,我們習慣使用 Android 的 Log class 來印出所需的資訊。但是當今天開發到一定的階段,程式必須發布上線時,為了資訊安全等需求,需要將這些 Log 給全部註解或移除,又或是加上 buildFlavor 或 buildType 判斷,這一切實在是太麻煩了…

2. 每次在新的類別中使用 Log 就要建一個該類別的 TAG String

1
2
3
4
5
val TAG: String = Hello::class.java.simple

if (BuildConfig.DEBUG) {
    Log.d(TAG, "Hello World!")
}

同步發表在 HackMD & Medium

Timber 怎麼使用

1. Dependency

build.gradle 中加入以下的 Dependency。

1
2
3
4
5
6
7
repositories {
  mavenCentral()
}

dependencies {
  implementation 'com.jakewharton.timber:timber:5.0.1'
}

2. 初始化

在專案內繼承的 Application class 的 onCreate() 中呼叫以下程式碼。這樣一來,Timber 的 log 就只會在 BuildTypeDEBUG 的時候才會印出。

1
2
3
4
5
6
7
override fun onCreate() {
    super.onCreate()

    if (BuildConfig.DEBUG) {
        Timber.plant(Timber.DebugTree())
    }
}

如果有想要在正式版時印出特定的除錯資訊,可以參考官方的範例

3. 使用

1
2
Timber.d("initFcmToken: token = $token")
Timber.e(e, "initCertificate: ")

基本上 i, w, d, e 四種 Log 類型都有。 另外,Library 本身還帶有語法檢查,如果使用 Timber 但格式錯誤,或是有用 Android 的 Log,都會有 IDE 的 Highlight 提醒你修正。

參考資料