Android Log分段打印长文字,并超链接点击。

1 篇文章 0 订阅

前言

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

	//工具类
    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[4]
            Log.println(type, tag,
                "${Thread.currentThread().name},${stackTraceElement.className}.${stackTraceElement.methodName}.(${stackTraceElement.fileName}:${stackTraceElement.lineNumber})\n" + message)
        }
    }
}

更新

抱歉,之前的获取stackTraceElement下标写错了,现在再用到查看才发现不对。已更正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KIDD-4869

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值