어떤 프로그램이든 릴리즈를 할 때에는 개발 때 사용했던 로그가 찍히지 않도록 해야한다. 안드로이드에서는 기본적으로 Logger를 제공해주는데, 디버깅을 할 때에는 로그가 보여지도록 아래와 같이 커스텀 클래스를 만들 수 있다.


import android.util.Log;

public class Logger {
private static final String LOG_TAG = "APP_NAME";
private static final String FORMAT = "[%s]: # %s";

public static void v(String msg) {
if (!BuildConfig.DEBUG) return;
Log.v(LOG_TAG, String.format(FORMAT, getCallerInfo(), msg));
}

public static void d(String msg) {
if (!BuildConfig.DEBUG) return;
Log.d(LOG_TAG, String.format(FORMAT, getCallerInfo(), msg));
}

public static void i(String msg) {
if (!BuildConfig.DEBUG) return;
Log.i(LOG_TAG, String.format(FORMAT, getCallerInfo(), msg));
}

public static void w(String msg) {
if (!BuildConfig.DEBUG) return;
Log.d(LOG_TAG, String.format(FORMAT, getCallerInfo(), msg));
}

public static void e(String msg) {
if (!BuildConfig.DEBUG) return;
Log.e(LOG_TAG, String.format(FORMAT, getCallerInfo(), msg));
}

private static String getCallerInfo() {
StackTraceElement[] elements = new Exception().getStackTrace();
String className = elements[2].getClassName();
return className.substring(className.lastIndexOf(".") + 1, className.length()) + "_" + elements[2].getLineNumber();
}
}


기존에는 Log에 사용할 TAG를 CLASSNAME.class.getSimpleName() 메서드를 사용했었는데, 클래스 이름을 아래의 두 가지 방법을 통하여 얻을 수 있다. 자세한 내용은 첨부된 첫 번째 링크를 참고하자.


  • Thread.currentThread().getStackTrace()
  • new Exception().getStackTrace();


어플리케이션이 디버깅 중인지, 릴리즈 상태인지를 알기 위해서는 다양한 방법이 있는데, 여기서는 BuildConfig를 사용하였다.



참고


[안드로이드] 커스텀 Logger 클래스 만들기


Log | Android Developer


stack overflow - 

Detect if I am in release or debug mode in android


블로그 이미지

NCookie

,