일반적인 로그 출력은 Log를 통해 태그와 메세지를 출력한다.
이와 비슷하지만 더 간결한 Timber
@라는 라이브러리를 통해 더 깔끔하게 처리할 수 있다.
Log와 달리 태그를 넣지 않아도되고 태그자리에 띄워진 클래스의 이름이 출력된다.
// Timber
implementation "com.jakewharton.timber:timber:4.7.1"
앱이 초기화되자마자 Timber를 초기화 시켜주어야한다.
class App: Application() {
...
override fun onCreate() {
super.onCreate()
Timber.plant(Timber.DebugTree())
...
}
}
MainActivity에서 퍼미션 검사하는 로직에 로그를 출력해본다.
비교를 위해 Log와 같이 넣어주었다.
// 퍼미션 검사
if(!permission.checkPermission()){
loadingCircleDialog.show()
permission.requestPresent()
} else {
Log.d("MainActivity", "Log, 퍼미션 검사 완료.")
Timber.d("Timber, 퍼미션 검사 완료.")
...
}
간단히 아래와 같이 확인할 수 있다.
Log.d("MainActivity", "Log, 퍼미션 검사 완료.")
Timber.d("Timber, 퍼미션 검사 완료.")
개발시 로그를 출력하는건 필수다. 디버깅도 좋지만 로그가 편할때도 있다.
하지만 로그에 출력된 정보들이 단순 출력이 아니라 url, 로그인정보라면 문제가 될 것이다.
그래서 한 프로젝트에서는 팀장님께서 릴리즈 버전으로 만드는경우엔 로그를 주석처리 하라고 하셨다.
다만 매번 주석처리하는 것은 번거롭고 주석처리할 규모가 커진다면 많은 시간소요가 따를 수 밖에 없다.
따라서 아래와 같이 바꿔주면 손쉽게 바꿀 수 있다.
override fun onCreate() {
prefs = MySharedPreferences(applicationContext)
super.onCreate()
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree())
}
...
}
BuildConfig.Debug일때만 초기화되므로 자연스럽게 Release인 경우엔 로그가 찍히지 않는다.
usb를 연결한 상태로 릴리즈 앱을 실행했을 경우 아무 작업을하지 않은 Log와 달리 Timber는 로그에 나오지 않는걸 확인할 수 있다.
그외에도 Timber.DebugTree()
를 상속받아 로그를 상세하게 출력할 수 있다.