android進階3step3:Android 常用框架——Logger框架
Log做什麼用?
Android研發人員在除錯程式的時候,或多或少的會使用log來檢視程式執行狀態。
同時,系統也會通過log提示研發人員,系統需要處理的資訊,例如異常,系統警告。
程式執行狀態(多執行緒尤為重要)
Log的級別
- Log.v 的除錯顏色為黑色的,任何訊息都會輸出,這裡的v代表verbose囉嗦的意思;
- Log.d的輸出顏色是藍色的,僅輸出debug除錯的意思;
- Log.i的輸出為綠色,一般提示性的訊息information;
- Log.w的輸出為橙色,可以看作為warning警告
- 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);
為啥使用它?
- 預設實現是對於android.util.Log的封裝
- 彌補了“android的logcat的message有字元長度的限制,超過將直接截斷”的缺陷
- 支援引數新增佔位符來格式化字串,Logger.d(“hello %s”, “world”);
- 支援直接列印List,Set,Map,陣列型別等引用型別
- 指定任意TAG
- 配置初始化選項
- 支援自定義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)