[android] Log에 실제 클래스로 이동하는 링크를 달아보자

로그를 표시하다보면, 어디서 찍었는지 찾기 힘들 때가 있는데, 이 방법을 사용하면 logcat에 해당 로그를 표시한 곳으로 바로 이동할 수 있는 링크가 만들어진다.

먼저 Log대신 Logg 라는 클래스를 만든다. “App#” 부분은 logcat 필터에 사용하기 위한 문자열이다.

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

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

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

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

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

  private static String tag() {
    int level = 4;
    StackTraceElement trace = Thread.currentThread().getStackTrace()[level];
    String fileName = trace.getFileName();
    String classPath = trace.getClassName();
    String className = classPath.substring(classPath.lastIndexOf(".") + 1);
    String methodName = trace.getMethodName();
    int lineNumber = trace.getLineNumber();
    return "APP# " + className + "." + methodName + "(" + fileName + ":" + lineNumber + ")";
  }
}

 

사용법은 이렇게만 하면 된다.

Logg.i("====== test =====");

 

그러면

I/APP# MainActivity.onCreate(MainActivity.java:51): ====== test =====

이런 식으로 logcat에 클릭할 수 있는 로그가 표시된다.