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

waynemysky 7年前發布 | 6K 次閱讀 XML 安卓開發 Android開發 移動開發

android-ueueo-log

android-ueueo-log是Android日志輸出工具,對輸出的日志信息進行了美化,可以輸出Json字符串,Xml字符串和簡單的Java對象,并對輸出信息進行了格式化。

特性

  • 輸出Json,Xml和Java對象(包括數組,集合,Map),并進行了格式化縮進;
  • 輸出打印日志的方法調用棧信息;
  • 輸出當前線程信息;
  • 支持將日志存儲到文件中;
  • 可自由控制日志輸出級別;
  • 支持日志的拼接組合輸出;

下載和導入

項目中使用Gradle導入:

dependencies {
   compile 'com.ueueo:log:2.1'
}

如何使用

初始化

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而存儲在不同的文件夾中,當程序運行打印第一條日志時會根據當前時間創建日志文件,并且此次運行都存儲在此日志文件中,當退出應用重新啟動進程,則會創建新的日志文件。

如果不進行任何初始化操作,則所有參數都為默認值。

輸出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>");

//創建Java對象 User user = new User(); user.id = 102; user.name = "UEUEO"; user.age = 22; //輸出對象 UELog.object(user);</code></pre>

輸出結果分別如下圖:

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

上圖分別為輸出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,并且保存到文件中");

日志的拼接組合輸出

為了方便大家理解我所說的日志的拼接組合,我先來舉個例子:

當發送網絡請求時,需要打印請求的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!\"}");

也就是分步打印數據,這樣打印出來的結果如下:

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

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

看到這樣的輸出是不是更加的清楚明白,那這個日志是怎樣輸出的呢?如下:

//拼接合并輸出
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 拼接的日志將被清空,再次打印的日志將沒有之前的拼接信息;

 

 

來自:http://www.jianshu.com/p/5719e25d970b

 

 本文由用戶 waynemysky 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!