Kotlin的LogUtil
来源:互联网 发布:乐乎lofter 编辑:程序博客网 时间:2024/06/08 14:06
最近在撸东西,调试的时候用Android原生的Log感觉很不爽,打的Log给我一种东倒西歪,凌乱的感觉。于是自己看了一下Blankj大神的Android-Utils库,看了一下他实现的LogUtils,借鉴了一下,简单的封装了一个在Kotlin中可以正确使用的LogUtil。不过话说讲道理,有扩展,Util这种东西还是可以尽量不用的,但是我有点不清楚Log这玩意该扩展给谁呢,Any?所以还是写了一个LogUtil……
打印效果
最后直接放一下打印Log的样子,这里只放出i级别的日志:
处理了日志比较长的时候的情况,点击log中蓝色的字可以跳转到代码中的相应位置,各位如果感兴趣是怎么实现的,可以直接看我代码(当然了,我也是看别人的才知道怎么去实现,哈哈)。
Blankj大神的LogUtils有一个问题,就是代码中获取代码文件的时候写死了.java结尾,所以在kotlin以.kt结尾的时候,就无法正确的跳转到代码里(版本号:1.8.3),当然了,我已经跟Blankj反馈了,在不久的将来应该会修复。
完整代码
import android.util.Logimport java.util.*/** * Created by xiasuhuei321 on 2017/9/1. * author:luo * e-mail:xiasuhuei321@163.com */object LogUtil { private val MIN_STACK_OFFSET = 3 var defaultTag = "LogUtil" private val lineSeparator = System.getProperty("line.separator", "/n") val V = Log.VERBOSE val D = Log.DEBUG val I = Log.INFO val W = Log.WARN val E = Log.ERROR val A = Log.ASSERT private val TOP_BORDER = "╔═══════════════════════════════════════════════════════════════════════════════════════════════════" private val LEFT_BORDER = "║ " private val BOTTOM_BORDER = "╚═══════════════════════════════════════════════════════════════════════════════════════════════════" private val MAX_LEN = 1000 var open = true private fun processTagAndHead(): String { val elements = Thread.currentThread().stackTrace val offset = getStackOffset(elements) val targetElement = elements[offset] val head = Formatter() .format("%s [%s(%s:%d)]", "In Thread: " + Thread.currentThread().name, targetElement.methodName, targetElement.fileName, targetElement.lineNumber) return head.toString() } private fun processMsgBody(msg: String, flag: Int, tag: String = defaultTag) { printTop(flag, tag) // 首先打印调用信息 printLog(flag, tag) val lineCount = msg.length / MAX_LEN if (lineCount == 0) { printLog(flag, tag, msg) } else { var index = 0 var i = 0 while (true) { printLog(flag, tag, msg.substring(index, index + MAX_LEN)) index += MAX_LEN if ((++i) >= lineCount) break } } printBottom(flag, tag) } fun getStackOffset(trace: Array<StackTraceElement>): Int { var i = MIN_STACK_OFFSET while (i < trace.size) { val e = trace[i] val name = e.className if (name != LogUtil::class.java.name) { return i } i++ } return 2 } /* 虽然 kotlin 有默认值这种操作,但是 Log.i(tag,msg) 这种比较符合平时的操作,所以还是提供类似的重载, * 而非 LogUtil.i(msg: String,tag: String = defaultTAG) 这种带默认值参数的方法 */ fun v(msg: String) { v(defaultTag, msg) } fun i(msg: String) { i(defaultTag, msg) } fun d(msg: String) { d(defaultTag, msg) } fun w(msg: String) { w(defaultTag, msg) } fun e(msg: String) { e(defaultTag, msg) } fun v(tag: String, msg: String) { if (!open) { return } processMsgBody(msg, V, tag) } fun i(tag: String, msg: String) { if (!open) { return } processMsgBody(msg, I, tag) } fun d(tag: String, msg: String) { if (!open) { return } processMsgBody(msg, D, tag) } fun w(tag: String, msg: String) { if (!open) { return } processMsgBody(msg, W, tag) } fun e(tag: String, msg: String) { if (!open) { return } processMsgBody(msg, E, tag) } fun printLog(flag: Int, tag: String, msg: String = processTagAndHead()) { Log.println(flag, tag, LEFT_BORDER + msg) } fun printBottom(flag: Int, tag: String) { Log.println(flag, tag, BOTTOM_BORDER) } fun printTop(flag: Int, tag: String) { Log.println(flag, tag, TOP_BORDER) } fun closeLog() { this.open = false }}
阅读全文
0 0
- Kotlin的LogUtil
- Kotlin版LogUtil
- xutils3 的 LogUtil使用
- LogUtil
- LogUtil
- LogUtil
- LogUtil
- LogUtil
- logutil
- logutil
- LogUtil
- LogUtil
- 定制自己的工具LogUtil
- Android常用的简单LogUtil.
- 实用的工具类Logutil
- 简单的写日志工具类LogUtil
- Log4j For Android 和LogUtil的使用
- 简单的工具类LogUtil、Toast
- cmake 基本语法
- SpringBoot 配置 Druid1.1.6【官方配置】
- react组件间数据传递(笔记)
- 关于api-ms-win-crt-runtime-l1-1-0安装vc后还是缺失的情况
- 树莓派3B 设置成静态IP
- Kotlin的LogUtil
- 钱才是最好的刺激
- 把faster-rcnn检测出来的结果保存成txt,再转成xml
- HBase集群搭建
- 版本控制工具SVN
- 使用Redis协议构建网络服务
- 关于Android studio 3.0 Failure [INSTALL_FAILED_TEST_ONLY]安装失败的问题
- opencv HoughCircles的使用心得
- iOS-微信分享成功回调问题