Android日志打印工具-android-ueueo-log

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言沐,方法調用棧數量和文件存儲

上面說明了邓嘹,當調用UELoginit方法進行初始化時,可以指定日志的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

有什么問題或者建議歡迎在簡書上給我留言硼补,謝謝~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末驮肉,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子已骇,更是在濱河造成了極大的恐慌离钝,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褪储,死亡現場離奇詭異卵渴,居然都是意外死亡,警方通過查閱死者的電腦和手機鲤竹,發(fā)現死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門浪读,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人辛藻,你說我怎么就攤上這事碘橘。” “怎么了吱肌?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵痘拆,是天一觀的道長。 經常有香客問我氮墨,道長纺蛆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任规揪,我火速辦了婚禮桥氏,結果婚禮上,老公的妹妹穿的比我還像新娘粒褒。我一直安慰自己识颊,他們只是感情好,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祥款,像睡著了一般清笨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刃跛,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天抠艾,我揣著相機與錄音,去河邊找鬼桨昙。 笑死检号,一個胖子當著我的面吹牛,可吹牛的內容都是我干的蛙酪。 我是一名探鬼主播齐苛,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼桂塞!你這毒婦竟也來了凹蜂?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤阁危,失蹤者是張志新(化名)和其女友劉穎玛痊,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體狂打,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡擂煞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了趴乡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片对省。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浙宜,靈堂內的尸體忽然破棺而出官辽,到底是詐尸還是另有隱情,我是刑警寧澤粟瞬,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布同仆,位于F島的核電站,受9級特大地震影響裙品,放射性物質發(fā)生泄漏俗批。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一市怎、第九天 我趴在偏房一處隱蔽的房頂上張望岁忘。 院中可真熱鬧,春花似錦区匠、人聲如沸干像。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽麻汰。三九已至速客,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間五鲫,已是汗流浹背溺职。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留位喂,地道東北人浪耘。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像塑崖,于是被迫代替她去往敵國和親七冲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法弃舒,類相關的語法癞埠,內部類的語法状原,繼承相關的語法聋呢,異常的語法,線程的語...
    子非魚_t_閱讀 31,663評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,284評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理颠区,服務發(fā)現削锰,斷路器,智...
    卡卡羅2017閱讀 134,701評論 18 139
  • ? 2016年 很特別 這一年結束了高中時光 這一年開始了大學生活 在心里告別了許多人 或是班級里作為大家的榜樣 ...
    幾木木木閱讀 299評論 0 0
  • 上大學的時候蛹稍,覺得世界是美好的,現實是美好的部服,然而唆姐,畢業(yè)卻打破了一切的幻想,把一切赤裸裸的現實擺在面前廓八,最后用這些...
    對方正在輸入_44b6閱讀 202評論 0 1