Table of contents

  1. Log 를 위한 TAG 만드는 방법 비교
  2. Timber

Log 를 위한 TAG 만드는 방법 비교

this::class 는 reflection 을 사용해서 성능상 좋지 않다고 한다. 참고:StackOverflow

private const val TAG1 = "HabitLayer"

class HabitLayer {
  companion object {
    private val TAG2 = this::class.qualifiedName
    private val TAG3 = this::class.simpleName
  }
  private val TAG4 = javaClass.name
  private val TAG5 = javaClass.canonicalName
  private val TAG6 = javaClass.simpleName

  init {
    arrayOf(TAG1, TAG2, TAG3, TAG4, TAG5, TAG6).forEach { Log.i("TAG_TEST", "$it") }
  }
}

결과

I/HabitLayer: HabitLayer
I/HabitLayer: com.obplanner.calendarview.month.layers.HabitLayer.Companion
I/HabitLayer: Companion
I/HabitLayer: com.obplanner.calendarview.month.layers.HabitLayer
I/HabitLayer: com.obplanner.calendarview.month.layers.HabitLayer
I/HabitLayer: HabitLayer

Timber

Timber

환경별로 다른 로그 시스템을 설정할 수 있다

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

Firebase 의 Crashlytics 로그 처리 가능

class ProductionTree : Timber.Tree() {
  override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
    if (priority > Log.DEBUG) {
      FirebaseCrashlytics.getInstance().log("$tag: $message")
    }
  }
}