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

java 용은 http://susemi99.kr/5281/ 에 했는데, 아직 코틀린용은 블로그에 안 올렸었구나 ;;;

import android.util.Log

/**
 * 로그 표시용
 */
object Logg {
  private fun tag(): String? {
    return Thread.currentThread().stackTrace[4].let {
      val link = "(${it.fileName}:${it.lineNumber})"
      val path = "App# ${it.className.substringAfterLast(".")}.${it.methodName}"
      if (path.length + link.length > 80) {
        "${path.take(80 - link.length)}...${link}"
      } else {
        "${path}${link}"
      }
    }
  }

  fun v(msg: String?) {
    Log.v(tag(), "" + msg)
  }

  fun d(msg: String?) {
    Log.d(tag(), "" + msg)
  }

  fun i(msg: String?) {
    Log.i(tag(), "" + msg)
  }

  fun w(msg: String?) {
    Log.w(tag(), "" + msg)
  }

  fun w(e: Throwable?) {
    Log.w(tag(), "" + e?.localizedMessage)
  }

  fun w(e: Exception?) {
    Log.w(tag(), "" + e?.localizedMessage)
  }

  fun e(msg: String?) {
    Log.e(tag(), "" + msg)
  }
}

실제 로그를 찍을 땐 이렇게 하면 된다.

Logg.i("========= 로그 ==========")

그럼 이렇게 로그가 찍힌다.

I/App# MainActivity.onCreate(MainActivity.kt:11): ========= 로그 ==========

이런 식으로 자동으로 링크가 생겨서 클릭하면 저 위치로 이동한다.

좀 더 편하게 하기위해서는 auto import 도 적용해줘야 한다.

live template 에도 단축키를 지정해준다. 나는 vlog, dlog, ilog, wlog, elog 를 지정해두고 사용하고 있다.