android-ueueo-log
android-ueueo-log是Android日志輸出工具舶治,對輸出的日志信息進行了美化,可以輸出Json字符串,Xml字符串和簡單的Java對象婆排,并對輸出信息進行了格式化。
感謝Logger笔链,因為是基于Logger然后根據自己的需求做的一些修改段只。
特性
- 輸出Json,Xml和Java對象(包括數組鉴扫,集合赞枕,Map),并進行了格式化縮進坪创;
- 輸出打印日志的方法調用棧信息炕婶;
- 輸出當前線程信息;
- 支持將日志存儲到文件中莱预;
- 可自由控制日志輸出級別古话;
- 支持日志的拼接組合輸出;

下載和導入
可以從Github上下載源碼:android-ueueo-log
簡書地址:http://www.reibang.com/p/5719e25d970b
項目中使用Gradle導入:
dependencies {
compile 'com.ueueo:ueueo-log:2.5'
}
如何使用
初始化
UELog
共提供了4個初始化方法:
UELog.init("AAA");
UELog.init("AAA", 2);
UELog.init("AAA", 3, UELogLevel.INFO);
UELog.init("AAA", 4, UELogLevel.INFO, true);
第一個參數:全局日志打印的Tag(默認為UEUEO
);
第二個參數:打印方法調用棧的數量(默認為 1
)锁施;
第三個參數:指定日志打印級別陪踩,只有要輸出的日志級別大于等于(>=)此參數值,才會打印悉抵。
日志級別從低到高分別為:
VERBOSE=1,DEBUG=2,INFO=3,WARN=4,ERROR=5,ASSERT=6,NONE=7肩狂,當指定為NONE時就不會輸出任何日志了;
第四個參數:指定日志是否保存到文件中(默認為false
不保存)姥饰。
日志文件存儲路徑為外部存儲空間的根目錄下 UEUEO
文件夾里傻谁,日志文件會根據不同的Tag而存儲在不同的文件夾中,當程序運行打印第一條日志時會根據當前時間創(chuàng)建日志文件列粪,并且此次運行都存儲在此日志文件中审磁,當退出應用重新啟動進程谈飒,則會創(chuàng)建新的日志文件。
如果不進行任何初始化操作态蒂,則所有參數都為默認值杭措。
輸出Json,Xml和Java對象
//輸出Json字符串
UELog.json("{\"id\":221,\"name\":\"my name is ueueo\",\"desc\":\"this is description!\"}");
//輸出Xml字符串
UELog.xml("<?xml version=\"1.0\" encoding=\"UTF-8\"?><html><title>this is a title</title><body>這個是網頁</body></html>");
//創(chuàng)建Java對象
User user = new User();
user.id = 102;
user.name = "UEUEO";
user.age = 22;
//輸出對象
UELog.object(user);
輸出結果分別如下圖:

輸出打印日志的方法調用棧信息

上圖分別為輸出1級方法調用棧钾恢,輸入3級方法調用棧和不輸出方法調用棧的日志輸出結果手素。
前兩條日志當有方法調用棧輸出時,日志信息會通過邊框美化輸出瘩蚪,而第三條日志因為不需要輸出方法調用棧信息泉懦,而且日志信息是單行日志,輸出時為了不占用控制臺輸出空間疹瘦,所以不會添加邊框崩哩。但是如果輸出多行日志則會有邊框,例如:
UELog.i("第一行日志 \n 換行輸出日志");
輸出結果如下:

Exception輸出
try {
Object obj = null;
obj.toString();
} catch (Exception e) {
UELog.e(e, "空指針異常");
}
輸出結果如下:

輸出有不定參數的字符串日志
UELog.i("指定參數的日志輸出 參數1:%d 參數2:%s 參數3:%s", 110, "apple", "ueueo");
輸出結果如下:

設置當前要打印日志的Tag言沐,方法調用棧數量和文件存儲
上面說明了邓嘹,當調用UELog
的init
方法進行初始化時,可以指定日志的Tag等配置信息呢灶,這些配置影響的是全局的日志輸出吴超,但是有些時候我們可能希望當前要輸出的日志與init
方法指定的配置不一樣,例如:
init
時指定Tag為AAA鸯乃,但是當前的日志希望Tag為BBB鲸阻,則:
UELog.init("AAA");
UELog.i("輸出的日志Tag是AAA");
UELog.tag("BBB").i("輸出的日志Tag是AAA");
UELog.i("再次輸出的日志Tag是AAA");
輸出結果如下:

除了可以單獨指定Tag外,還可以指定方法調用棧顯示數量和是否存儲到文件:
UELog.tag("BBB").method(3).file(true).i("輸出的日志Tag是BBB缨睡,顯示方法數量為3鸟悴,并且保存到文件中");
日志的拼接組合輸出
為了方便大家理解我所說的日志的拼接組合,我先來舉個例子:
當發(fā)送網絡請求時奖年,需要打印請求的URL细诸、請求參數和返回結果,一般的做法是:
//打印請求地址
UELog.i("POST http://www.baidu.com/api/gps");
//打印請求參數
UELog.json("{\"id\":221}");
//打印返回結果
UELog.json("{\"name\":\"my name is ueueo\",\"desc\":\"this is description!\"}");
也就是分步打印數據陋守,這樣打印出來的結果如下:

這樣看其實也挺清楚明白的震贵,但是當網絡請求多線程并發(fā)時,上面的日志就有可能變成如下:

這時候你還能看出誰是誰的參數水评,誰是誰的結果嗎猩系,肯定是不行的,而日志的拼接組合就是為了解決這個問題中燥,我們先來看看下面的日志輸出:

看到這樣的輸出是不是更加的清楚明白寇甸,那這個日志是怎樣輸出的呢?如下:
//拼接合并輸出
UELog.append("POST http://www.baidu.com/api/gps");
UELog.append("請求參數");
UELog.appendJson("{\"id\":221}");
UELog.append("返回結果");
UELog.json("{\"name\":\"my name is ueueo\",\"desc\":\"this is description!\"}");
UELog提供了append方法,可以對多次要輸出的內容進行拼接拿霉,然后最后一次行的輸出吟秩,append方法有:
UELog.append("字符串");//拼接字符串
UELog.appendJson("{\"id\":221}");//拼接Json字符串
UELog.appendXml("<html></html>");//拼接Xml字符串
UELog.appendObject(obj);//拼接對象
也可以這樣拼接:
UELog.append("字符串").appendJson("{\"id\":221}").appendXml("<html></html>").appendObject(obj).i("輸出");
append
方法并不會進行日志輸出,只有調用了日志輸出方法才會最終輸出的控制臺绽淘,輸出方法就是:
UELog.v("verbose level log");
UELog.d("debug level log");
UELog.i("info level log");
UELog.w("warn level log");
UELog.e("error level log");
UELog.wtf("assert level log");
UELog.json("json string log");
UELog.xml("xml string log");
UELog.object(obj);
注意:
- 其中json涵防,xml和object的輸出都是以debug等級輸出的;
-
append
方法的調用必須是在同一線程內才有效收恢,所以最好保證你的append
方法的調用都是在同一個方法里武学,而且調用日志輸出方法輸出日志之后祭往,append
拼接的日志將被清空伦意,再次打印的日志將沒有之前的拼接信息;
作者 UEUEO
簡書主頁:http://www.reibang.com/u/7adf23444c8d
有什么問題或者建議歡迎在簡書上給我留言硼补,謝謝~