是什麼?
- 是一個簡單,漂亮,強大的Android開源日志工具,代碼托管在github上 https://github.com/orhanobut/logger
有何特點?
- 能夠提供:
- 線程資訊:log在哪個線程
- 類資訊:log在哪個類
- 方法資訊:log在哪個方法的哪一行
- 漂亮地列印json
- 漂亮的換行分割
- 整潔的輸出
- 跳轉到源代碼
為什麼用它?
- 預設實作是對于android.util.Log的封裝
- 彌補了“android的logcat的message有字元長度的限制,超過将直接截斷”的缺陷
- 支援參數添加占位符來格式化字元串,
Logger.d("hello %s", "world");
- 支援直接列印List,Set,Map,數組類型等引用類型
- 指定任意TAG
- 配置初始化選項
- 支援自定義CustomLogAdapter實作LogAdapter,替換android.util.Log
怎麼使用?
1. 配置初始化選項(可選操作,不配置會提供預設配置)
Logger
.init("mytag") // default PRETTYLOGGER or use just init()
.methodCount() // default 2
.hideThreadInfo() // default shown
.logLevel(LogLevel.NONE) // default LogLevel.FULL
.methodOffset() // default 0
.logAdapter(new AndroidLogAdapter()); //default AndroidLogAdapter
}
注:以上任一配置項都是可選的,可以根據需求組合。最好是在Application的onCreate()裡面配置。
預設配置下,
Logger.d("hello");
效果如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CMyV2Zn9Gbvw1N4MXZhRDbqNHaycTbyJja6ZHdiZ2Yxd2Lc52dvR2ayFWbtgmej9CXt92Yu8WdsVnY5pnLjlGdhR3cvw1LcpDc0RHaiojIsJye.png)
- 最上面的區域顯示線程資訊:Thread:main表示是在主線程。通過設定
可以隐藏該區域;Logger.hideThreadInfo()
- 中間的區域顯示類和方法資訊:按方法調用棧的順序列印,可以看出
的MainActivity
方法調用了onCreate
方法,後者執行了method2
,并且Logger.d("hello");
位于Logger.d("hello");
類的第73行,滑鼠左鍵單擊藍色連結,就能跳轉到MainActivity
處于源代碼中的位置。Logger.d("hello");
決定列印多少行(每一行代表一個方法),設定Logger.methodCount(int)
效果為:Logger.methodCount(3)
Log架構之Logger
設定日志等級,Logger.logLevel(LogLevel)
列印所有日志,LogLevel.FULL
不列印日志,釋出正式版本應該用LogLevel.NONE
。LogLevel.NONE
設定方法的偏移量,設定Logger.methodOffset(int)
效果為:Logger.methodOffset(1)
設定Log架構之Logger
效果為:Logger.methodOffset(-1)
Log架構之Logger
設定log最終的列印邏輯,預設是Logger.logAdapter(LogAdapter)
,源碼如下:AndroidLogAdapter
package com.orhanobut.logger;
import android.util.Log;
class AndroidLogAdapter implements LogAdapter {
@Override public void d(String tag, String message) {
Log.d(tag, message);
}
@Override public void e(String tag, String message) {
Log.e(tag, message);
}
@Override public void w(String tag, String message) {
Log.w(tag, message);
}
@Override public void i(String tag, String message) {
Log.i(tag, message);
}
@Override public void v(String tag, String message) {
Log.v(tag, message);
}
@Override public void wtf(String tag, String message) {
Log.wtf(tag, message);
}
}
- 最下面的區域顯示log的最重要部分:message
2. 列印不同級别的log
Logger.v(String message); // VERBOSE級别,可添加占位符
Logger.d(Object object); // DEBUG級别,列印對象
Logger.d(String message); // DEBUG級别,可添加占位符
Logger.i(String message); // INFO級别,可添加占位符
Logger.w(String message); // WARN級别,可添加占位符
Logger.e(String message); // ERROR級别,可添加占位符
Logger.e(Throwable throwable, String message); // ERROR級别,可添加占位符
Logger.wtf(String message); // ASSERT級别,可添加占位符
// 一個綜合方法,level可取Logger.VERBOSE...Logger.ASSERT
Logger.log(int level, String tag, String message, Throwable throwable);
String xml = "<note><to>George</to><from>John</from><heading>Reminder</heading><body>Don't forget the meeting!</body></note>";
Logger.xml(xml); // 列印xml
String json = "{" +
"\"employees\": [" +
"{ \"firstName\":\"Bill\" , \"lastName\":\"Gates\" }," +
"{ \"firstName\":\"George\" , \"lastName\":\"Bush\" }," +
"{ \"firstName\":\"Thomas\" , \"lastName\":\"Carter\" }" +
"]" +
"}";
Logger.json(json); // 列印json
3.列印List,Set,Map,數組類型
Logger.d(Object object);
4.指定TAG
Logger.init(String tag);
Logger.t(String tag);
Logger.t(String tag, int methodCount);
5.通過占位符格式化字元串
Logger.d("hello %s %d", "world", ); // 占位符的使用,列印“hello world ”