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

로그를 표시하다보면, 어디서 찍었는지 찾기 힘들 때가 있는데, 이 방법을 사용하면 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() {
    StackTraceElement trace = Thread.currentThread().getStackTrace()[4];
    String fileName = trace.getFileName();
    String classPath = trace.getClassName();
    String className = classPath.substring(classPath.lastIndexOf(".") + 1);
    String methodName = trace.getMethodName();
    int lineNumber = trace.getLineNumber();
    String linkString = "(" + fileName + ":" + lineNumber + ")";
    String pathString = "APP# " + className + "." + methodName;
    if (pathString.length() + linkString.length() > 80) { return pathString.substring(0, 80 - linkString.length()) + "..." + linkString; }
    else { return pathString + linkString; }
  }
}

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

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

그러면

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

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