본문 바로가기

Kotlin/자주쓰는 내용 정리

안드로이드 Logger Util

728x90

Logger Util 을 만들어서 클래스, 메소드 명만 출력하면서 사용하고 있었는데

MainActivity.java:123

이런 형태로 출력하면 해당 라인으로 바로 이동도 가능하다고 한다.

 

object Logger {
    private val isDEBUG = BuildConfig.DEBUG

    fun d(message: String) {
        if (isDEBUG) {
            Log.d(tag(), message)
        }
    }

    fun e(message: String) {
        if (isDEBUG) {
            Log.e(tag(), message)
        }
    }

    fun i(message: String) {
        if (isDEBUG) {
            Log.i(tag(), message)
        }
    }

    fun w(message: String) {
        if (isDEBUG) {
            Log.w(tag(), message)
        }
    }

    fun v(message: String) {
        if (isDEBUG) {
            Log.v(tag(), message)
        }
    }

    private fun tag(): String {
        val level = 4
        val trace = Thread.currentThread().stackTrace[level]
        val fileName = trace.fileName
        val classPath = trace.className
        val className = classPath.substring(classPath.lastIndexOf(".") + 1)
        val methodName = trace.methodName.split("$").find { !it.contains("lambda") }
        val lineNumber = trace.lineNumber
        return "Logger# $className.$methodName($fileName:$lineNumber)"
    }
}