Android中自定义log输出,过长log以及点击跳转链接

前言

现在有很强大工具类了,按理说是不需要自己手写的,但是这种不算难的方法实现还是可以了解一下的,也是我遇到的一个小测试题中的内容,在此记录一下,另外科普一下一个使用非常广的工具类。

	//工具类
    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)
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39168470/article/details/113758720
今日推荐