1. 程式人生 > >android進階3step3:Android 常用框架——Logger框架

android進階3step3:Android 常用框架——Logger框架

 

Log做什麼用?

Android研發人員在除錯程式的時候,或多或少的會使用log來檢視程式執行狀態

同時,系統也會通過log提示研發人員,系統需要處理的資訊,例如異常,系統警告

程式執行狀態(多執行緒尤為重要)

 Log的級別

 

  1. Log.v 的除錯顏色為黑色的,任何訊息都會輸出,這裡的v代表verbose囉嗦的意思;
  2. Log.d的輸出顏色是藍色的,僅輸出debug除錯的意思;
  3. Log.i的輸出為綠色,一般提示性的訊息information;
  4. Log.w的輸出為橙色,可以看作為warning警告
    ,一般需要我 們注意優化Android程式碼;
  5. Log.e為紅色,可以想到error錯誤

顯示級別 v>d>i>w>e

選擇v所有都會出現,選擇d會出現本身及以下,選擇e只會出現e的資訊

 簡單、漂亮、功能強大的Logger

 

  • 執行緒資訊Thread information
  • 類資訊Class information
  • 方法資訊Method information
  • 漂亮列印的JSON內容Pretty-print for json content
  • 清空輸出Clean output
  • 跳轉到原始碼Jump to source feature

2.列印不同level的Log 

VERBOSE:

Logger.v(String message); // VERBOSE級別,可新增佔位符 

DEBUG: 

Logger.d(Object object); // DEBUG級別,列印物件 

Logger.d(String message); // DEBUG級別,可新增佔位符 

 INFO:

Logger.i(String message); // INFO級別,可新增佔位符 

WARN:

Logger.w(String message); // WARN級別,可新增佔位符 

ERROR:

Logger.e(String message); // ERROR級別,可新增佔位符 

Logger.e(Throwable throwable, String message); // ERROR級別,可新增佔位符 

其他:

Logger.wtf(String message); // ASSERT級別,可新增佔位符 

Logger.xml(String xml); 

Logger.json(String json);

為啥使用它?

  1. 預設實現是對於android.util.Log的封裝
  2. 彌補了“android的logcat的message有字元長度的限制,超過將直接截斷”的缺陷
  3. 支援引數新增佔位符來格式化字串,Logger.d(“hello %s”, “world”);
  4. 支援直接列印List,Set,Map,陣列型別等引用型別
  5. 指定任意TAG
  6. 配置初始化選項
  7. 支援自定義CustomLogAdapter實現LogAdapter,替換android.util.Log
     

如何使用?——》官方文件

新增依賴:

implementation 'com.orhanobut:logger:2.2.0'

配置初始化選項(非必須選項,不配置的情況下會使用系統預設的初始化配置 ,根據需求增刪,最後adapter是必要的

 Logger
  .init("mytag")    //LOG TAG預設是PRETTYLOGGER 
  .methodCount(3)                 // 決定列印多少行(每一行代表一個方法)預設:2
  .hideThreadInfo()               // 隱藏執行緒資訊 預設:顯示
  .logLevel(LogLevel.NONE)        // 是否顯示Log 預設:LogLevel.FULL(全部顯示)
  .methodOffset(2)                // 預設:0
  .logAdapter(new AndroidLogAdapter()); //可以自己構造介面卡預設:AndroidLogAdapter
}

效果:

 以下是官方文件的內容:

選項

Logger.d("debug");
Logger.e("error");
Logger.w("warning");
Logger.v("verbose");
Logger.i("information");
Logger.wtf("What a Terrible Failure");

支援字串格式引數

Logger.d("hello %s", "world");

支援集合(僅適用於除錯日誌)

Logger.d(MAP);
Logger.d(SET);
Logger.d(LIST);
Logger.d(ARRAY);

Json和Xml支援(輸出將處於除錯級別)

Logger.json(JSON_CONTENT);
Logger.xml(XML_CONTENT);

Advanced

FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
  showThreadInfo(false)   //(可選)是否顯示執行緒資訊。預設值true 
  .methodCount(0)          //(可選)要顯示的方法行數。預設值2 
  .methodOffset(7)         //(可選)隱藏內部方法呼叫到偏移量。預設值5 
  .logStrategy(customLog)//(可選)更改要列印的日誌策略。預設LogCat 
  .tag(“我的自定義標籤”)    //(可選)每個日誌的全域性標記。預設PRETTY_LOGGER .build PRETTY_LOGGER
  .build();

Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));

Loggable

日誌介面卡通過檢查此功能來檢查是否應列印日誌。如果要禁用/隱藏輸出日誌,請覆蓋isLoggable方法。 true將列印日誌訊息,false將忽略它。

Logger.addLogAdapter(new AndroidLogAdapter() {
  @Override public boolean isLoggable(int priority, String tag) {
    return BuildConfig.DEBUG;
  }
});

將日誌儲存到檔案中

// TODO:稍後會新增更多資訊

Logger.addLogAdapter(new DiskLogAdapter());

將自定義標記新增到Csv格式策略

FormatStrategy formatStrategy = CsvFormatStrategy.newBuilder()
  .tag("custom")
  .build();
  
Logger.addLogAdapter(new DiskLogAdapter(formatStrategy));

這個怎麼運作

More

  • 使用過濾器可獲得更好的效果。PRETTY_LOGGER或您的自定義標記
  • 確保禁用換行選項
  • 您還可以通過更改設定來簡化輸出。

  • Timber Integration
// Set methodOffset to 5 in order to hide internal method calls
Timber.plant(new Timber.DebugTree() {
  @Override protected void log(int priority, String tag, String message, Throwable t) {
    Logger.log(priority, tag, message, t);
  }
});

更多內容示例:可參考這些文章  :

android日誌框架Logger的詳細使用(目前最新版2.1.1)

Android強大log框架Logger使用詳解