Log在Android日常开发中的重要性不言而喻,出现bug后的第一件事基本都是先看log。但是在使用Android原生Log类时,通常需要先定义一个静态TAG,然后Log.d(TAG,"message");
,为了解决在项目上线时去掉log的需求,我们通常会再封装一个LogUtil类来实现这个功能,未免有些繁琐。既然有现成的轮子可以更高效、更简洁、更美观的解决log的问题,那我们何乐而不为呢。
Simple, pretty and powerful logger for android
正如Github主页https://github.com/orhanobut/logger介绍的一样,Logger的使用特别简单,相比Android原生log只多了一步初始化操作,但是Logger会让打印更下明晰,更加美观。如下:
implementation 'com.orhanobut:logger:2.2.0'
Logger需要在项目的Application中进行初始化操作,也可以根据具体需求自定义属性。
Logger.addLogAdapter(new AndroidLogAdapter());
Logger.addLogAdapter(new AndroidLogAdapter(){
@Override
public boolean isLoggable(int priority, @Nullable String tag) {
//也可以根据priority的VERBOSE、DEBUG、INFO、WARN、ERROR等不同级别
//进行过滤,只在发布版本中保留ERROR的打印等
return BuildConfig.DEBUG; //只在DEBUG模式下打印log
}
});
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
.showThreadInfo(true) //是否打印当前线程
.methodCount(2) //方法数显示多少行,默认两行
.methodOffset(5) //隐藏方法内部调用到偏移量,默认5
.tag("Logger Demo") //自定义TAG,Logger打印会使用同一个TAG
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
FormatStrategy formatStrategy = CsvFormatStrategy.newBuilder()
.tag("TAG")
.build();
Logger.addLogAdapter(new DiskLogAdapter(formatStrategy){
@Override
public boolean isLoggable(int priority, @Nullable String tag) {
return BuildConfig.DEBUG;
}
});
自动保存到log文件这个功能比较坑的是不能指定log文件路径,只能使用默认的路径
Logger.d("Log d");
Logger.e("Log e");
Logger.w("Log w");
Logger.v("Log v");
Logger.i("Log i");
Logger.wtf("Log wtf");
每种打印方法都有多个重载方法,不同重载方法的差异各位自己摸索吧,不具体说了,大同小异。
需要注意的是各种只有一个参数的打印方法中,只有Logger.d
的参数是Object其他都是String型变量。
try {
int[] a = {1,2,3};
a[4] = 4;
} catch (Exception e) {
e.printStackTrace();
Logger.e(e, "message");
}
为什么单独说下Exception的打印呢,一来Exception的打印方式是有点特别,再者主要是展示Logger的打印真的是既美观又直观啊。系统打印与Logger的对比如下:
Logger.json(jsonStr);
Logger.xml(xmlStr);
这两个方法会是json和xml数据进行格式化输入,更易于阅读。如下:
因为Logger使用统一的TAG,如果想要使用不同的TAG进行打印可以:
Logger.t("MyTag").d("用临时TAG打印");