object TsmLogUtils {
const val TAG_WORKER="tsm_work_tag"
@JvmStatic
fun i(message:String?){
/**
* 获取调用方法栈,可以获取到所有的类的信息,从而在打印日志过程中自动添加调用的打印日志的类名和方法名,还有行号
*/
var trace: kotlin.Array<java.lang.StackTraceElement?>? =Thread.currentThread().stackTrace
trace?.apply {
var index=-1
for (stackIndex in trace.indices) {
var className= getSimpleClassName(trace[stackIndex]?.className ?:"")
if(TsmLogUtils::class.java.simpleName == className){
index=stackIndex+1
break
}
}
if(index in 0 until size){
var builder = StringBuilder()
builder.append("\n")
.append("----------------------------")
.append("\n")
.append(trace[index]?.className)
.append(".")
.append(trace[index]?.methodName)
.append(" ")
.append(" (")
.append(trace[index]?.fileName)
.append(":")
.append(trace[index]?.lineNumber)
.append(")")
.append("\n")
.append("$message")
.append("\n")
.append("------------------------------------------------------------------------------------")
Log.i("tian.shm", builder.toString())
}
}
}
private fun getSimpleClassName( name: String): String? {
val lastIndex = name.lastIndexOf(".")
return name.substring(lastIndex + 1)
}
}
使用这个方法打印出来的日志的样式
image.png
其中蓝色的字体点击是可以自动定位到打印日志的地方,非常方便
网友评论