Android KLog源码分析
[TOC]
一直使用这个库,但没有仔细研究,今天就来研究一下,该库的地址:
KLog,在这里先感谢下作者,棒棒哒!
代码结构
整个代码的结构很简单,如下:
1 | library |
共六个文件:
- BaseLog.java,支持基本的log打印
- FileLog.java,支持以文件的形式保存log
- JsonLog.java,支持打印json对象和json数组
- XmlLog.java,支持打印Xml形式的log
具体分析
BaseLog
两个方法:
1 | public class BaseLog { |
这里突破了android系统的log字数限制,其实就是超过字数限制后,采用分次打印的方法来打印,其他代码不做分析,比较简单。
FileLog
三个方法
1 | public class FileLog { |
JsonLog
JsonLog就更简单了,只有一个方法(本宝宝以前还以为Json打印会很麻烦呢)
1 | public class JsonLog { |
XmlLog
两个方法:
1 | public class XmlLog { |
细心的你会发现,无论是Json形式还是XML形式,调用的都是系统原生的方法来处理数据,因此有时候熟悉java(或android)提供的方法还是很方便的,哈哈。
上面用到的KLogUtil,如下:
1 | public class KLogUtil { |
核心文件KLog.java分析
给方法主要提供了类似于系统log方法的不同重载,比较简单,我这里要讲的是那个获取log具体有关的类名、方法名、行号等,与之相关的就是wrapperContent这个方法了。
1 | private static String[] wrapperContent(int stackTraceIndex, String tagStr, Object... objects) { |
分析完毕,是不是很简单,如果你看了这个库的代码,你会觉得我的分析都是多余的。
遇到的问题
在使用KLog打印json形式信息时,如果网络请求时异步的,会导致KLog.json打印的格式出现错乱,即一个结果还没有完全打印出来,里外一个就开始打印了,这个应该是并发导致的问题,之后我会在KLog的基础上对这个问题进行优化的。