一直有记录三方框架的使用和原理的想法,由于技术是有限再加上懒惰这个想法一直没有开始实践。看着别人写的一些系列文章写的都很精彩,就觉得不能再懒惰了,不能再拖着了。由于技术实力有限,正好最近也在选择日志框架,所以先从Logger开始记录。用logger开个头,后续会有其他的。
日常Android开发时经常会用到日志打印,主要用于追踪程序的运行信息,寻找bug相关的蛛丝马迹,Android系统为我们提供了日志打印的工具类android.util.Log,我们可以通过Log工具打印日志,比如Log.i("tag","xxx"),Log.d("tag","xxx") 等等。但是有些情况下系统提供的日志类并不能满足我们的开发需求,比如需要在打印的日志中能够体现出线程信息,格式化方法调用的结构树等等,相比系统的log类,Logger框架能够满足我们的开发需求。
Logger框架的基本使用:
引入框架:
目前的最新版本是2.2.0,在gradle中引入 implementation 'com.orhanobut:logger:2.2.0'
开始使用:
首先初始化Logger
Logger.addLogAdapter(new AndroidLogAdapter());
打印log
参考as的logcat级别,logger也设置了响应的打印级别,这几个级别分别是:VERBOSE、DEBUG、INFO、WARN、ERROR和ASSERT,对应到logger中的方法分别是Logger.v(String msg,Object...obj)、Logger.d(String msg,Object...obj)、Logger.i(String msg,Object...obj)、Logger.w(String msg,Object...obj)、Logger.e(String msg,Object...obj)和Logger.wtf(String msg,Object...obj)
比如要打印VERBOSE级别的log,可以调用Logger.v("xxx"),要打印INFO级别的log,可以调用Logger.i("xxx")
测试代码如下:
public void initLogger(){
// FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder().methodCount(4).tag("MLogger").methodOffset(2).logStrategy(new LogcatLogStrategy()).build();
Logger.addLogAdapter(new AndroidLogAdapter());
Logger.d("d","hello");
// Logger.v("v","hello");
// Logger.i("v","hello");
// Logger.e("e","hello");
}
运行效果如下:
是不是很nice,Logger的显示效果分为四个部分,分别是 tag信息、线程信息、方法调用树、日志输出信息,上图是Logger的默认显示效果,其实Logger还提供了一套可以定制化的策略,接下来我们学习一下这个定制化策略。
Logger中提供了一个策略类来实现定制化需求,具体代码如下
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder().
showThreadInfo(true).//显示线程信息
methodCount(4).//显示的方法数量
tag("MLogger").//tag
methodOffset(2).//方法名字在显示区域的偏移量
logStrategy(new LogcatLogStrategy()).build();
这段代码使用建造者模式来定制显示策略,涉及的主要策略作用已在注释中说明。调用的时候需要将这个策略类作为参数传递给AndroidLogAdapter()。调用代码如下
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
Logger.d("d","hello");
按照上面的代码添加了显示策略之后日志打印效果就变成这样了
Logger日志框架的基本使用就先记录到这里,接下来会对Logger的实现原理进行分析