前言
现在有很强大工具类了,按理说是不需要自己手写的,但是这种不算难的方法实现还是可以了解一下的,也是我遇到的一个小测试题中的内容,在此记录一下,另外科普一下一个使用非常广的工具类。
//工具类
implementation 'com.blankj:utilcode:1.30.5'
代码片段
以下是kotlin代码,所写的一个工具类,里面主要介绍log过长怎么处理,虽然处理的不是很优雅,但是总体来说就是log限制最大输出长度为4*1024个,及4k,所以我们在输出的时候可以计算长度截取循环输出。
其次点击跳转到指定位置,核心就是输出的时候以“.(文件名:行数)”格式输出,详情见代码最后输出部分。
object LogUtils {
fun d(tag: String, message: Any) {
if (Build.TYPE.contains("debug")) {
log(Log.DEBUG, tag, message.toString())
}
}
fun i(tag: String, message: Any) {
if (Build.TYPE.contains("debug")) {
log(Log.INFO, tag, message.toString())
}
}
fun w(tag: String, message: Any) {
if (Build.TYPE.contains("debug")) {
log(Log.WARN, tag, message.toString())
}
}
private fun log(type: Int, tag: String, message: String) {
//日志最大长度为4*1024,即4K,避免过长日志无法打印
val size = 3 * 1024
if (message.length > size) {
var msg = message
while (msg.length > size) {
//循环分段打印日志
val temp = msg.substring(0, size)
log(type, tag, msg)
msg = msg.replace(temp, "")
}
//打印剩余log
log(type, tag, msg)
} else {
val stackTraceElement = Throwable().stackTrace[0]
Log.println(type, tag,
"${
Thread.currentThread().name},${
stackTraceElement.className}.${
stackTraceElement.methodName}.(${
stackTraceElement.fileName}:${
stackTraceElement.lineNumber})\n" + message)
}
}
}