![](https://img.haomeiwen.com/i2051992/c01e31eee1c6087b.jpg)
很多同学应该都知道Android有一款相当不错的额Log开源框架Logger!
在Logger1.1.5的版本时好像还不能将日志写入文件中,但是在最新版本的2.2.1版本已经可以了。
然后我发现我想找一些使用教程的时候,几乎都是1.15版本的。所以我想要不我来补一篇2.2.1的吧!废话不多说!
官方github,永远都是我们或许最新版本和教程的最好途径:
所以先贴出来了:https://github.com/orhanobut/logger
它的使用其实很简单一共可以就分为三步:
第一步:gragle导入
compile 'com.orhanobut:logger:2.1.1'
第二步:初始化
Logger.addLogAdapter(new AndroidLogAdapter());
第三步:使用
Logger.d("debug");
Logger.e("error");
Logger.w("warning");
Logger.v("verbose");
Logger.i("information");
Logger.wtf("wtf!!!!");
通过上面三步就可以实现如下图的美丽清秀的log了:
![](https://img.haomeiwen.com/i2051992/02d866e6bdef5d20.jpg)
附加:Logger的打印方法中还对动态字符串、集合、以及json、Xml的支持:
Logger.d("hello %s", "world");
Logger.d(MAP);
Logger.d(SET);
Logger.d(LIST);
Logger.d(ARRAY);
Logger.json(JSON_CONTENT);
Logger.xml(XML_CONTENT);
json的打印效果图:
![](https://img.haomeiwen.com/i2051992/5d05600a7ef10221.jpg)
Logger的基本配置
上面的配置基本可以满足我们的基本需求了。
但是往往我们还会有一些特殊需求
首先我们需要了解的是,通过Logger的源码我们不难知道。上面初始化时,配置的AndroidLogAdapter()其实还有带参构造方法
public AndroidLogAdapter() {
this.formatStrategy = PrettyFormatStrategy.newBuilder().build();
}
public AndroidLogAdapter(FormatStrategy formatStrategy) {
this.formatStrategy = formatStrategy;
}
我们点击进入FormatStrategy类,会发现这个Adapter的很多适配项其实都是通过FormatStrategy进行配置的,Logger的github上也给出了如下的配置表
![](https://img.haomeiwen.com/i2051992/d39b087783867c3e.jpg)
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
.showThreadInfo(false) // 是否显示线程信息 默认显示 上图Thread Infrom的位置
.methodCount(0) // 展示方法的行数 默认是2 上图Method的行数
.methodOffset(7) // 内部方法调用向上偏移的行数 默认是0
.logStrategy(customLog) // 改变log打印的策略一种是写本地,一种是logcat显示 默认是后者(当然也可以自己定义)
.tag("My custom tag") // 自定义全局tag 默认:PRETTY_LOGGER
.build();
注:关于methodCount(0),我再解释一下。以上如图为例如果这个方法设置为1的话,那么将看不到第二行
MainActivity.printPretty (MainActivity.java:33)
然而能看到onCreate中内部调用的一个方法。
但其实我到目前为止还没有用过它。
Logger的高级配置
我们先来看一下Logger这个开源库
![](https://img.haomeiwen.com/i2051992/8885e3e47ffc51fd.jpg)
这就是它全部的源码类了!
我们简单理解一下这里面的主要类和主要接口及其实现:
Logger类:用来初始化和打印log的类
LogAdapter接口:可以用来配置是否打印log以及FormatStrategy
|-AndroidLogAdapter
|-DiskLogAdapter
FormatStrategy接口:用来实现格式策略以及配置LogStrategy
|-PrettyFormatStrategy:logcat显示样式实现类
|-CsvFormatStrategy:写入cvs文件的样式实现
LogStrategy接口:用来实现log的显示的策略
|-DiskLogStrategy 写入本地文件
|-LogCatlogStrategy logCat显示
那么大概了解了它的主要类和接口之后,我们就差不多可以为所欲为了!
高级配置一:根据构建应用的版本来确定是否输出log
这样我们就再也不用再手动配置ture/false来确定发布版本了!
第一步:gradle中配置一个boolean变量——LEO_DEBUG
Android{
buildTypes {
release {
***
buildConfigField "boolean", "LEO_DEBUG", "false"
***
}
debug {
***
buildConfigField "boolean", "LOG_DEBUG", "true"
***
}
}
}
第二步:可以继承AndroidLogAdapter重写isLoggable方法
@Override public boolean isLoggable(int priority, String tag) {
return BuildConfig.LOG_DEBUG||priority==Logger.ERROR;
}
这样就实现了!
"高级配置二:自定义样式"
通过阅读PrettyFormatStrategy的源码,我们看到下图的代码,这就是配置其样式的地方。
所以如果你想,你也可以将单线的替换成双线的“═ ╠ ╔ ╚”。当然这个类中还可以自定义其他的一些内容,你也可以去探索一下!
![](https://img.haomeiwen.com/i2051992/30832d801a7216ec.jpg)
"高级配置三:自定义LogStrategy"
其实关于log输入显示。就两种一种写入本地文件,一种显示在logCat!
看了上面的代码结构,可能你会问这两种方式都有了,还需要自定义吗!
如果你用过Logger你就会发现,它写入到本地的文件是csv格式
用excel打开是这样的!
![](https://img.haomeiwen.com/i2051992/11c288377ab01f83.jpg)
可能你并不习惯,你还是想用txt
那么需要自定义一个CustomDiskStrategy类实现LogStrategy接口
将DiskLogStrategy的实现代码copy过去然后,修改下面代码中的csv为txt就好了
![](https://img.haomeiwen.com/i2051992/e8f6b89ed2eba4cd.jpg)
但由于LogStrategy都是在FormatStrategy内部配置的,所有我们还需要自定义一个CustomFormatStrategy类,其实也是可以简单复制CvsFormateStrategy类,然后用我们刚才自定义的CustomDiskStrategy替换掉里面所有的DiskLogStrategy就好了!
最后的提示
如果你想要在logCat中打印出log,同时有想要写到文件中,那么你需要为Logger添加两个Adapter,如下图所示,我配置了自定义的TxtFormateStrategy和它自带的PrettyFormategy。之所以提醒。是因为我之前只配置了CvsFormateStrategy,结果死活打不出log。我调试了好一会,最后跟进去发现,它的FormateStrategy的功能是单一的,写本地就只写本地,logCat显示就只是logCat显示
![](https://img.haomeiwen.com/i2051992/686652f0c270df2e.jpg)
好了,这一篇就写到这里。
最后感谢开源,给我提供了更多的学习资源。并让我实现更多可能性的同时还避免了重复造轮子!
![](https://img.haomeiwen.com/i2051992/21125a2d6a092dc0.jpg)
如果你喜欢欢迎关注我的微信公众号『Android程序员日记』
网友评论