땀이 삐질삐질 나는 개발 일기

Utils Log 클래스로 간편하게 Log처리하기 본문

개발 Tip

Utils Log 클래스로 간편하게 Log처리하기

삐질 2019. 6. 30. 22:27
안녕하세요. 삐질삐질 개발하는 개발자 삐질입니다.

오늘은 개발을 하면서 매우 간단하지만  귀찮고, 없어서는 않되지만, 일일이 관리하기엔 매우 번거로운

디버깅의 필수 코드 Log에 대해 알아보도록 하겠습니다.


Log는 아래와 같은 Case에 주로 사용합니다.
  • Case 1. 해당 단계까지 진입 했는지?
  • Case 2. 해당 단계까지 왔다면, 값이 제대로 
  • Case 3. BreakPoint를 두고 한 단계씩 Debugging 하기에는 번거롭고, 진행 상황을 연속적으로 기록하기 위함

이런 용도로 Log를 사용하기 위해서 우리는 아래와 같은 코드를 사용합니다.
Log.e("Tag","Message");
Log.d("Tag","Message");
Log.i("Tag","Message");
Log.v("Tag","Message");
각 로그 레벨( e, d , i , v)에 관해서는 지금 다루지 않겠습니다.

위 같은 레벨의 로그들을 필요한 위치에 작성 하시겠죠?  하지만 우리는 문제점이 있습니다.
필요에 따라서 로그를 한번에 모두 Not Working 하게 해야하는 경우  매번 코드를 찾아 따라다니며 삭제하기 귀찮죠.
또한 일괄적인 코드레벨의 변경이 필요할때 하나하나 찾아다니면서 관리하기 매우 귀찮음이 발생합니다. 

이를 이유로 아래와 같은 Utils Method를 작성하도록 합니다.

public static void Log_e(String tag, String msg) {
    Log.e(tag, msg);
}

public static void Log_v(String tag, String msg) {
    Log.v(tag, msg);
}

public static void Log_i(String tag, String msg) {
    Log.i(tag, msg);
}

public static void Log_d(String tag, String msg) {
    Log.d(tag, msg);
}


어떤가요?  내가 특정 레벨의 로그를 출력하지 않았으면 할땐 해당 메서드의 Contents 부를 주석처리해주면 됩니다.

여기까지 이해가 되었다면 또하나의 특수한 경우가 있습니다. 

Q. d레벨로 Log를 사용하면 Release때 노출되지 않으니 무조건 d로 하면 되지않냐?
A. 그럼 Release APK의 Debugging이 필요할땐 어떻게 하시겠나요?  

이때도 마찬가지로 하나의 조건문을 통해 해결할 수 있습니다.
public static void Log_e(String tag, String msg) {
    if (BuildConfig.DEBUG) { //Debug
        Log.e(tag, msg);
    } else { //Release
        Log.e(tag, msg);
    }
}


그럼 한번만 더 단계를 추가해보겠습니다.

Q. 그럼 릴리즈에서도 간단하게  상태를 컨트롤 하고 싶다면?? 
  1. Gradle(App Level)에 BuildConfig변수를 추가해준다.
  2. IS_SHOW_LOG같은 플래그를 두어 나는 Release버전에 따라. Gradle의 변수 하나만 수정해줌으로써 로그를 컨트롤 한다
  3. buildTypes에 release와 debug둘다 명시 ( 반드시 ) 
buildTypes {
    release {
        minifyEnabled false
        debuggable true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        buildConfigField "String", "IS_SHOW_LOG", "\"N\""
    }
    debug {
        buildConfigField "String", "IS_SHOW_LOG", "\"N\""
    }
}

public static void Log_e(String tag, String msg) {
    if (BuildConfig.DEBUG) { //Debug
        Log.e(tag, msg);
    } else { //Release
        if(BuildConfig.IS_SHOW_LOG.equals("Y")) {
        }
        else{
            Log.e(tag, msg);
        }
    }
}


이렇게 사용할 수 있습니다. 유용하게 개발하길 바라며 이만 ! 


안드로이드 초보 개발자를 위해 아래와 같은 카카오 오픈톡을 운영 중입니다



Comments