Log在Android日常開發(fā)中的重要性不言而喻矫钓,出現(xiàn)bug后的第一件事基本都是先看log要尔。但是在使用Android原生Log類時,通常需要先定義一個靜態(tài)TAG新娜,然后Log.d(TAG,"message");
赵辕,為了解決在項(xiàng)目上線時去掉log的需求,我們通常會再封裝一個LogUtil類來實(shí)現(xiàn)這個功能杯活,未免有些繁瑣匆帚。既然有現(xiàn)成的輪子可以更高效熬词、更簡潔旁钧、更美觀的解決log的問題吸重,那我們何樂而不為呢。
OverView
Simple, pretty and powerful logger for android
正如Github主頁https://github.com/orhanobut/logger介紹的一樣歪今,Logger的使用特別簡單嚎幸,相比Android原生log只多了一步初始化操作,但是Logger會讓打印更下明晰寄猩,更加美觀嫉晶。如下:
Android Studio配置
implementation 'com.orhanobut:logger:2.2.0'
初始化
Logger需要在項(xiàng)目的Application中進(jìn)行初始化操作,也可以根據(jù)具體需求自定義屬性田篇。
基礎(chǔ)使用
Logger.addLogAdapter(new AndroidLogAdapter());
控制隱藏日志
Logger.addLogAdapter(new AndroidLogAdapter(){
@Override
public boolean isLoggable(int priority, @Nullable String tag) {
//也可以根據(jù)priority的VERBOSE替废、DEBUG、INFO泊柬、WARN椎镣、ERROR等不同級別
//進(jìn)行過濾,只在發(fā)布版本中保留ERROR的打印等
return BuildConfig.DEBUG; //只在DEBUG模式下打印log
}
});
自定義屬性
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
.showThreadInfo(true) //是否打印當(dāng)前線程
.methodCount(2) //方法數(shù)顯示多少行兽赁,默認(rèn)兩行
.methodOffset(5) //隱藏方法內(nèi)部調(diào)用到偏移量状答,默認(rèn)5
.tag("Logger Demo") //自定義TAG,Logger打印會使用同一個TAG
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
保存log文件
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文件路徑刀崖,只能使用默認(rèn)的路徑
打印
d惊科、e、w亮钦、v馆截、i和wtf
Logger.d("Log d");
Logger.e("Log e");
Logger.w("Log w");
Logger.v("Log v");
Logger.i("Log i");
Logger.wtf("Log wtf");
每種打印方法都有多個重載方法,不同重載方法的差異各位自己摸索吧蜂莉,不具體說了孙咪,大同小異。
需要注意的是各種只有一個參數(shù)的打印方法中巡语,只有Logger.d
的參數(shù)是Object其他都是String型變量翎蹈。
打印Exception
try {
int[] a = {1,2,3};
a[4] = 4;
} catch (Exception e) {
e.printStackTrace();
Logger.e(e, "message");
}
為什么單獨(dú)說下Exception的打印呢,一來Exception的打印方式是有點(diǎn)特別男公,再者主要是展示Logger的打印真的是既美觀又直觀啊荤堪。系統(tǒng)打印與Logger的對比如下:
打印xml和json
Logger.json(jsonStr);
Logger.xml(xmlStr);
這兩個方法會是json和xml數(shù)據(jù)進(jìn)行格式化輸入,更易于閱讀枢赔。如下:
臨時TAG
因?yàn)長ogger使用統(tǒng)一的TAG澄阳,如果想要使用不同的TAG進(jìn)行打印可以:
Logger.t("MyTag").d("用臨時TAG打印");