어떤 프로그램이든 릴리즈를 할 때에는 개발 때 사용했던 로그가 찍히지 않도록 해야한다. 안드로이드에서는 기본적으로 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를 사용하였다.
참고
Detect if I am in release or debug mode in android
'안드로이드' 카테고리의 다른 글
[링크] 안드로이드 fragment를 사용하는 이유 (1) | 2018.08.12 |
---|---|
Nordic Android BLE Library 정리 (0) | 2018.07.24 |
Invoke-customs are only supported starting with Android O--min-api 26 (0) | 2018.07.15 |
current activity 가져오기 (0) | 2018.01.02 |
[안드로이드] Service에 대하여 (0) | 2017.12.22 |