android 打印带定位的日志log

184 阅读1分钟

相信大家在项目开发的过程中,会高频地使用日志作为分析的工具,下面我提供一个打印日志的同时,还能把日志打印的类,方法,当前行数,以及点击能定位到那行的日志工具类提供出来,让大家方便做日志调试

代码实现


import android.util.Log
import java.util.Locale


object MyLogger {

    fun d(tag:String, msg:String) {
        print(tag, msg, LogLevel.Debug)
    }

    fun i(tag:String, msg:String) {
        print(tag, msg, LogLevel.Info)
    }

    fun e(tag:String, msg:String) {
        print(tag, msg, LogLevel.Error)
    }

    fun w(tag:String, msg:String) {
        print(tag, msg, LogLevel.Warning)
    }

    private fun print(tag:String, msg:String, level: LogLevel) {
        val index = 4
        val stringBuffer = StringBuffer()
        //打印栈帧中的所有方法调用
        try {
            val stackTrace = Thread.currentThread().stackTrace
            val className = stackTrace[index].fileName
            var methodName = stackTrace[index].methodName
            val lineNumber = stackTrace[index].lineNumber
            methodName =
                methodName.substring(0, 1).uppercase(Locale.getDefault()) + methodName.substring(1)
            stringBuffer.append("[(").append(className).append(":").append(lineNumber).append(")#")
                .append(methodName).append("] ")
        } catch (e: Exception) {
            e.printStackTrace()
        }

        val finalMsg = "$stringBuffer: $msg"
        when (level) {
            LogLevel.Info-> {
                Log.i(tag, finalMsg)
            }
            LogLevel.Warning-> {
                Log.w(tag, finalMsg)
            }
            LogLevel.Debug-> {
                Log.d(tag, finalMsg)
            }
            LogLevel.Error -> {
                Log.e(tag, finalMsg)
            }
        }
    }
}

enum class LogLevel {
    Debug,
    Info,
    Error,
    Warning
}