본문 바로가기
개발/Android

[Android] Timber와 Log를 Debug 상태에서만 출력하기

by JhDroid 2021. 1. 6.
728x90

Timber

 

JakeWharton/timber

A logger with a small, extensible API which provides utility on top of Android's normal Log class. - JakeWharton/timber

github.com

  • Android 개발할 때 Log를 편리하게 남길 수 있게 도와주는 라이브러리입니다.

 

Log와 Timber 비교

  • Log와 Timber 사용법
Log.d("JhDroid_Test", "Hello! JhDroid")

Timber.d("Hello! JhDroid")
  • Timber는 Tag를 추가할 필요가 없습니다.

 

  • Log와 Timber Logcat 비교
Log.d
2021-01-06 12:40:14.791 20261-20261/com.jhdroid.fcm D/JhDroid_Test: Hello! JhDroid

Timber.d
2021-01-06 12:40:14.791 20261-20261/com.jhdroid.fcm D/MainActivity: Hello! JhDroid
  • Log의 Tag자리에 Timber를 호출한 클래스명이 옵니다. 

 

  • Timber는 Tag를 추가할 필요가 없지만 필요에 따라 Tag를 추가할 수 있습니다.
Timber.tag("JhDroid_Test").d("Hello! JhDroid")
  • 이렇게 사용하는 경우 클래스명이 위치하던 자리에 tag() 함수에 설정한 Tag가 들어가게 됩니다.
Timber.tag.d
2021-01-06 12:53:12.310 21373-21373/com.jhdroid.fcm D/JhDroid_Test: Hello! JhDroid

 

Timber 적용

  • 의존성 추가
implementation "com.jakewharton.timber:timber:4.7.1"

 

  • Application클래스에서 Timber 설정(Application클래스는 Manifest에 설정된 상태)
class JhDroidApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        
        Timber.plant(Timber.DebugTree())
    }
}

 

  • Timber를 이용한 Log 남기기
Timber.d("Hello! Timber!")

 

Timber Log를 Debug 상태에서만 출력하기

  • Timber를 사용해도 따로 설정을 해주지 않으면 release 상태일 때도 출력이 됩니다.

 

  • Application 클래스에서 Timber 설정 변경
class JhDroidApplication : Application() {
    override fun onCreate() {
        super.onCreate()

        if (BuildConfig.DEBUG) {
            Timber.plant(Timber.DebugTree())
        }
    }
}
  • BuildConfg.DEBUG를 이용해 Timber를 Debug 상태에서만 출력하도록 설정합니다.
    • BuildConfig 사용 시 주의할 점
    • import가 가끔 다른 패키지의 BuildConfig가 사용되는 경우가 있으니 꼭 자신의 패키지의 BuildConfig가 맞는지 확인하고 사용하셔야 합니다.

 

Timber를 이용해 더 상세한 Log를 남기는 방법

  • 위 코드들은 모두 Timber의 기본 DebugTree 클래스를 사용했는데 이 DebugTree 클래스를 상속받아 더 상세한 Log를 남길 수 있습니다.
  • 제가 자주 사용하는 DebugTree 클래스를 공유하고 Log를 어떤 식으로 남기는지 확인해보겠습니다.

 

  • TimberDebugTree
class TimberDebugTree : Timber.DebugTree() {
    override fun createStackElementTag(element: StackTraceElement): String? {
        return "${element.fileName}:${element.lineNumber}#${element.methodName}"
    }
}

 

  • CustomDebugTree 적용
class JhDroidApplication : Application() {
    override fun onCreate() {
        super.onCreate()

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

 

  • Log 확인
2021-01-06 13:06:30.688 21677-21677/com.jhdroid.fcm D/MainActivity.kt:15#onCreate: Hello! JhDroid, Hello! Timber!
  • 클래스명(파일명)과 로그를 출력하는 코드라인 넘버, 호출하는 함수명을 Tag자리에  추가해줍니다.
  • TimberDebugTree클래스를 수정해 다른 데이터를 추가하거나 제거할 수 있으니 잘 활용하시길 바랍니다!

 

* 글에 틀린 부분이 있으면 댓글 부탁드립니다 :D

728x90