안드로이드 스튜디오에서 앱을 작성하고 테스트하다 보면 디버그를 하기 위해서 로그를 출력할 때가 많이 있습니다. 조금 복잡해지다 보면 내가 로그를 어디에 넣었는지, 어느 곳의 로그가 출력된 것인지 헛갈릴 때가 종종 있습니다.
그리고 테스트가 종료되어 릴리즈를 할 경우에는 로그가 출력되지 않도록 해야 하는데 이럴 때 아래와 같이 로그 출력 클래스를 작성하여 사용하면 좀 더 효율적으로 작업을 할 수 있습니다.
로그 출력 클래스:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | public final class DLog { public static void v(String msg) { linkLog(Log.VERBOSE, msg); } public static void d(String msg) { linkLog(Log.DEBUG, msg); } public static void i(String msg) { linkLog(Log.INFO, msg); } public static void w(String msg) { linkLog(Log.WARN, msg); } public static void e(String msg) { linkLog(Log.ERROR, msg); } private static void linkLog(int priority, String msg) { // Build Config설정이 Debug모드일때만 로그를 출력한다. if (BuildConfig.DEBUG) { StringBuilder strBuilder = new StringBuilder(); // Thread에서 4번째 stacktrace를 가져오는데 // 클래스 설계에 따라 달라질 수 있다. StackTraceElement trace = Thread.currentThread().getStackTrace()[4]; String classPath = trace.getClassName(); // .위치를 찾아서 .뒷부분의 문자열(확장자)을 가져온다. String className = classPath.substring(classPath.lastIndexOf(".") + 1); strBuilder.append(className) .append(".") .append(trace.getMethodName()) .append("(") .append(trace.getFileName()) .append(":") .append(trace.getLineNumber()) .append(")"); // priority, tag, msg Log.println(priority, strBuilder.toString(), msg); } } } | cs |
위의 클래스를 프로젝트에 포함시키고 1 2 3 4 5 6 7 8 9 10 11 12 13 | public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { DLog.d("onCreate started!"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int number = 1 + 2; DLog.d("number is " + number); } } | cs |
위와 같이 DLog.d로 로그를 출력해 보면< 우선순위/클래스명.메소드명(로그출력 위치 링크): msg > 와 같이 출력되어'로그출력 위치 링크'를 눌러 로그를 출력한 곳으로 이동할 수도 있고보다 효율적으로 작업이 가능할 것이라 생각됩니다.... D/MainActivity.onCreate(MainActivity.java:11): onCreate started!
... D/MainActivity.onCreate(MainActivity.java:16): number is 3
댓글 없음:
댓글 쓰기