对Android的Log做一个简单的封装,让Log打印的功能更加的全面,打印任何想要打印的对象,Log出来的信息更加的层次鲜明直观明了。
Log封装的目标
- Log开关控制【默认开,一般release的时候会关闭,debug的时候会放开】。
- Log等级控制【VERBOSE,DEBUG,INFO ,WARN, ERROR, ASSERT六个等级,默认VERBOSE】。
- Log是否打印线程名字【默认打开】。
- Log是否打印堆栈信息【默认打开,这个可以很方便的找到我们调用Log的地方】。
- Log设置打印多少层堆栈信息【这里多层是后几层的意思,堆栈信息只会到我们Log调用的那一层,默认值为1】。
- Log自定义打印的格式【实现IPrinter接口,怎么打印的出来漂亮就可以怎么写,当然内部会默认实现一种PrettyPrinter】。
- Log打印任何对象【实现IParser接口,这样可以打印任何想要的对象,内部默认会实现BundleParse,CollectionParse,IntentParse,MapParse,ReferenceParse,ThrowableParse】。
- Log一些对象信息的时候希望层次感更强一点。更加的简单明了。
Log封装实现简单介绍
封装的流程图如下图所示:
封装的时候有两个特别关键的点:一个是IParser接口的实现(Log的Object的转换为String)、另一个是IPrinter接口的实现(对Log封装的对象进行输出)。
- IParser接口
/**
* 对象转换成字符串的接口
*
* @param <T> 泛型,任何我们想要log的对象
*/
public interface IParser<T> {
/**
* 换行
*/
String LINE_SEPARATOR = System.getProperty("line.separator");
/**
* class 的类型
*
* @return class type
*/
Class<T> classType();
/**
* 把我们想要输出的对象转换成String
*
* @param t 对象
* @param parsers 支持的转换库(对象里面可能还有对象,可能内部还得在转换)
* @return string
*/
String parse(T t, List<IParser> parsers);
/**
* 把我们想要输出的对象转换成String
*
* @param t 对象
* @param tab 缩进等级
* @param parsers 支持的转换库(对象里面可能还有对象,可能内部还得在转换)
* @return string
*/
String parse(T t, int tab, List<IParser> parsers);
}
重写IParser来Log出我们想要Log的对象,int tab参数是为了打印的时候层次感更强、更美观给几个缩进,List parsers参数是因为对象里面又有别的对象所以还得把支持的解析列表传进来。IParser接口内部默认实现了BundleParse、CollectionParse、IntentParse、MapParse、ReferenceParse、ThrowableParse。如果想实现自定义的对象的转换可以仿照着来写。
- IPrinter接口
public interface IPrinter {
/**
* log信息
*
* @param info log对象
*/
void print(LoggerInfo info);
}
在打印之前会把要输出的内容封装成一个LoggerInfo的对象。输出的时候操作这个对象就好了。想打印成什么形式的完成按照自己的意愿来。这里内部默认实现了PrettyPrinter。
Log封装的效果
只是大概列出几种效果
- Bundle的输出
- Intent输出
- Map输出
- Collection输出
- Reference输出
- Throwable输出
代码地址
作者:wuyuxing24 发表于2017/4/18 23:03:18 原文链接
阅读:121 评论:0 查看评论