[Android] 로그 처리

박주호·2022년 5월 5일
0

Hi, Android

목록 보기
2/7
post-thumbnail

Log 처리

Log?

일반적인 로그 출력은 Log를 통해 태그와 메세지를 출력한다.

이와 비슷하지만 더 간결한 Timber @라는 라이브러리를 통해 더 깔끔하게 처리할 수 있다.

Log와 달리 태그를 넣지 않아도되고 태그자리에 띄워진 클래스의 이름이 출력된다.

구현 방법

💡 라이브러리 추가 → Timber 초기화

📌 라이브러리 추가

// Timber
implementation "com.jakewharton.timber:timber:4.7.1"

📌 Timber 초기화

앱이 초기화되자마자 Timber를 초기화 시켜주어야한다.

class App: Application() {
		...

    override fun onCreate() {
        super.onCreate()

          Timber.plant(Timber.DebugTree())
        ...
    }
}

구현 결과 1

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인 경우엔 로그가 찍히지 않는다.

구현 결과 2

usb를 연결한 상태로 릴리즈 앱을 실행했을 경우 아무 작업을하지 않은 Log와 달리 Timber는 로그에 나오지 않는걸 확인할 수 있다.

그외에도 Timber.DebugTree()를 상속받아 로그를 상세하게 출력할 수 있다.

참고

[Android]Timber 사용하기.

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

profile
항상 배우려는 자세로

0개의 댓글