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