2017/10/4 19:23:03
自尊,自律,自强,自爱。–Power
本文主要介绍项目里使用到的第三方日志库Logger,本文借鉴了like_program的博文,
http://blog.csdn.net/like_program/article/details/52986553,现在的Logger已经更新到2.1.1了,以下会简单介绍它的使用。
Logger的GitHub地址:https://github.com/orhanobut/logger
简单来说,Logger的出现简化了我们开发过程中打印Log的繁琐,源于他的过滤,使的打印的日志更加清晰明了,可读性高。
Logger提供以下功能:
- 线程的信息
- 类的信息
- 方法的信息
- 将 JSON 文本人性化输出
- 将换行符人性化输出
- 简洁的输出
- 从日志跳转到源码
原生Log打印日志:
Logger打印日志:
通过两张图的对比,我们可以更直观的感受到Logger的人性化,以及给我们带来的极简效果,而且使用也及其简单。
dependencies {
compile 'com.orhanobut:logger:2.1.1'
}
Logger.addLogAdapter(new AndroidLogAdapter());
在项目的Application里面进行初始化操作,当然如果你要自定义,Logger也提供了方法
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
.showThreadInfo(false) //(可选)是否显示线程信息。 默认值为true
.methodCount(2) // (可选)要显示的方法行数。 默认2
.methodOffset(7) // (可选)隐藏内部方法调用到偏移量。 默认5
.logStrategy(customLog) //(可选)更改要打印的日志策略。 默认LogCat
.tag("POWER") //(可选)每个日志的全局标记。 默认PRETTY_LOGGER
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
切记,不要忘了在AndroidManifest.xml中声明
<application
android:name=".MyApplication" //这里进行声明
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
intent-filter>
activity>
application>
Logger.d("debug");
Logger.e("error");
Logger.w("warning");
Logger.v("verbose");
Logger.i("information");
Logger.wtf("wtf!!!!");
到这里,我们可以发现,我们再也不用定静态常量TAG了,我觉得这是最爽的!不过后面还有…我们来看一下打印:
以下会用到like_program博文里的引用
private String JSON_CONTENT = "{\"weatherinfo\":{\"city\":\"北京\",\"cityid\":\"101010100\"," +
"\"temp\":\"18\",\"WD\":\"东南风\",\"WS\":\"1级\",\"SD\":\"17%\",\"WSE\":\"1\"," +
"\"time\":\"17:05\",\"isRadar\":\"1\",\"Radar\":\"JC_RADAR_AZ9010_JB\"," +
"\"njd\":\"暂无实况\",\"qy\":\"1011\",\"rain\":\"0\"}}";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Logger.json(JSON_CONTENT);
}
- 打印xml数据
private String XML_CONTENT = "\"nay\">\"黑龙江\" pyName=\"heilongjiang\" " +
"cityname=\"哈尔滨\" state1=\"1\" state2=\"1\" stateDetailed=\"多云\"/>\"吉林\"" +
" pyName=\"jilin\" " +
"cityname=\"长春\" state1=\"0\" state2=\"0\" stateDetailed=\"晴\"/>\"辽宁\" " +
"pyName=\"liaoning\" " +
"cityname=\"沈阳\" state1=\"1\" state2=\"0\" stateDetailed=\"多云转晴\"/>\"海南\" pyName=\"hainan\" " +
"cityname=\"海口\" state1=\"22\" state2=\"21\" stateDetailed=\"中到大雨转小到中雨\"/> ";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Logger.xml(XML_CONTENT);
}
- 打印List数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// List 类型数据
List<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
Logger.d(list);
}
- 打印Map数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Map 类型数据
Map<String, String> map = new HashMap<>();
map.put("key_hello", "hello");
map.put("key_world", "world");
Logger.d(map);
}
- 打印Exception
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int[] a = new int[3];
try {
a[4] = 3;
} catch (Exception e) {
Logger.e(e, "message");
}
}
项目上线前,可以实现以下方法,以保证上线后不输出日志。
Logger.addLogAdapter(new AndroidLogAdapter() {
@Override public boolean isLoggable(int priority, String tag) {
return BuildConfig.DEBUG;
}
});
此方法用于将日志保存在文件中
Logger.addLogAdapter(new DiskLogAdapter());
如果你想保存指定的TAG,增加以下实现:
FormatStrategy formatStrategy = CsvFormatStrategy.newBuilder()
.tag("custom")
.build();
Logger.addLogAdapter(new DiskLogAdapter(formatStrategy));
以上是我对Logger使用的一些总结,有需要的朋友们可以使用,有错误的地方或讲解不详细、遗漏之处,欢迎在评论里指出,共同学习。