1. 程式人生 > >Android 開源日誌庫Logger的簡單使用

Android 開源日誌庫Logger的簡單使用

在專案測試執行的過程中需要有測試日誌,一般情況下都是自己根據需求定義自己Logger工具類,諸如:

import android.util.Log;

public class Logger {
	private static final int VERBOSE = 5;
	private static final int DEBUG = 4;
	private static final int INFO = 3;
	private static final int WARN = 2;
	private static final int ERROR = -1;

	private static int LOG_LEVEL = 6;

	public static void v(String tag, String msg) {
		if (LOG_LEVEL > VERBOSE) {
			Log.v(tag, msg);
		}
	}

	public static void d(String tag, String msg) {
		if (LOG_LEVEL > DEBUG) {
			Log.d(tag, msg);
		}
	}

	public static void i(String tag, String msg) {
		if (LOG_LEVEL > INFO) {
			Log.i(tag, msg);
		}
	}

	public static void w(String tag, String msg) {
		if (LOG_LEVEL > WARN) {
			Log.w(tag, msg);
		}
	}

	public static void e(String tag, String msg) {
		if (LOG_LEVEL > ERROR) {
			Log.e(tag, msg);
		}
	}

}

等等。一次偶然的機會在github上發現大神 分享了一開源專案Logger,用來輸出日誌,發現非常好用,該開源庫能夠把:

  • 執行緒的資訊
  • 類的資訊
  • 方法的資訊
  • 格式列印json、xml等
  • 點選連結跳轉到原始碼列印處
等的資訊打印出來,以便使Log日誌更加的清晰明瞭。並且該類實現起來非常簡單:

首先:關聯編譯開源庫,目前最新版本的是

compile 'com.orhanobut:logger:2.1.1'
再者進行初始化操作:
Logger.addLogAdapter(new AndroidLogAdapter());

當然你要想個人化定製,Logger還提供了一個根據自己需求輸出日誌的先進方法:

FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
  .showThreadInfo(false)  //(可選)是否顯示執行緒資訊。 預設值為true
  .methodCount(2)         // (可選)要顯示的方法行數。 預設2
  .methodOffset(7)        // (可選)隱藏內部方法呼叫到偏移量。 預設5
  .logStrategy(customLog) //(可選)更改要列印的日誌策略。 預設LogCat
  .tag("zqh")   //(可選)每個日誌的全域性標記。 預設PRETTY_LOGGER
.build();
然後再
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
就OK了。 一般我會把初始化操作放在Application裡面,當然你在Application中配置之後,千萬不要忘記在AndroidManifest.xml中宣告一下。

接下來我們就可以直接使用了:

1.普通日誌:

Logger.d("我是debug級別的log日誌");
Logger.i("我是infor級別的log日誌");
Logger.v("我是v級別的log日誌");
Logger.w("我是warn級別的log日誌");
Logger.e("我是error級別的log日誌");
輸出日誌:
09-16 15:41:12.294: D/zqh(29721): ┌───────────────────────────────────────────────────────────
09-16 15:41:12.294: D/zqh(29721): │ Method.invokeNative  (Method.java:-2)
09-16 15:41:12.294: D/zqh(29721): │    ActivityThread.main  (ActivityThread.java:5120)
09-16 15:41:12.294: D/zqh(29721): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
09-16 15:41:12.294: D/zqh(29721): │ 我是debug級別的log日誌
09-16 15:41:12.294: D/zqh(29721): └───────────────────────────────────────────────────────────
09-16 15:41:12.294: I/zqh(29721): ┌───────────────────────────────────────────────────────────
09-16 15:41:12.294: I/zqh(29721): │ Method.invokeNative  (Method.java:-2)
09-16 15:41:12.294: I/zqh(29721): │    ActivityThread.main  (ActivityThread.java:5120)
09-16 15:41:12.294: I/zqh(29721): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
09-16 15:41:12.294: I/zqh(29721): │ 我是infor級別的log日誌
09-16 15:41:12.294: I/zqh(29721): └───────────────────────────────────────────────────────────
09-16 15:41:12.294: V/zqh(29721): ┌───────────────────────────────────────────────────────────
09-16 15:41:12.294: V/zqh(29721): │ Method.invokeNative  (Method.java:-2)
09-16 15:41:12.294: V/zqh(29721): │    ActivityThread.main  (ActivityThread.java:5120)
09-16 15:41:12.294: V/zqh(29721): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
09-16 15:41:12.294: V/zqh(29721): │ 我是v級別的log日誌
09-16 15:41:12.294: V/zqh(29721): └───────────────────────────────────────────────────────────
09-16 15:41:12.294: W/zqh(29721): ┌───────────────────────────────────────────────────────────
09-16 15:41:12.304: W/zqh(29721): │ Method.invokeNative  (Method.java:-2)
09-16 15:41:12.304: W/zqh(29721): │    ActivityThread.main  (ActivityThread.java:5120)
09-16 15:41:12.304: W/zqh(29721): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
09-16 15:41:12.304: W/zqh(29721): │ 我是warn級別的log日誌
09-16 15:41:12.304: W/zqh(29721): └───────────────────────────────────────────────────────────
09-16 15:41:12.304: E/zqh(29721): ┌───────────────────────────────────────────────────────────
09-16 15:41:12.304: E/zqh(29721): │ Method.invokeNative  (Method.java:-2)
09-16 15:41:12.304: E/zqh(29721): │    ActivityThread.main  (ActivityThread.java:5120)
09-16 15:41:12.304: E/zqh(29721): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
09-16 15:41:12.304: E/zqh(29721): │ 我是error級別的log日誌
09-16 15:41:12.304: E/zqh(29721): └───────────────────────────────────────────────────────────

2.輸出Json/Xml型別的日誌:

String route = new Gson().toJson(infor);
Logger.json(route);
日誌輸出:
09-16 15:41:12.284: D/zqh(29721): ┌──────────────────────────────────────────────
09-16 15:41:12.284: D/zqh(29721): │ Method.invokeNative  (Method.java:-2)
09-16 15:41:12.284: D/zqh(29721): │    ActivityThread.main  (ActivityThread.java:5120)
09-16 15:41:12.284: D/zqh(29721): ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
09-16 15:41:12.284: D/zqh(29721): │ {
09-16 15:41:12.284: D/zqh(29721): │   "mcd": "9d0b77228dd94f84b208a9d3e77f6007",
09-16 15:41:12.284: D/zqh(29721): │   "psn": "Sxxxxxxxxxx",
09-16 15:41:12.284: D/zqh(29721): │   "mw": "1",
09-16 15:41:12.284: D/zqh(29721): │   "pc": "5",
09-16 15:41:12.284: D/zqh(29721): │   "catalog": "1",
09-16 15:41:12.284: D/zqh(29721): │   "vrd": "000000000",
09-16 15:41:12.284: D/zqh(29721): │   "pn": "1",
09-16 15:41:12.284: D/zqh(29721): │   "dsn": "122006010xxx",
09-16 15:41:12.284: D/zqh(29721): │   "sw": "20170916154112",
09-16 15:41:12.294: D/zqh(29721): │   "de": "2"
09-16 15:41:12.294: D/zqh(29721): │ }
09-16 15:41:12.294: D/zqh(29721): └────────────────────────────────────────────

同理,xml日誌輸出也是一樣的。

3.若是在專案上線之後,你想隱藏日誌那樣你就要實現:

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

該方法會覆蓋isLoggable以保證專案上線之後就不會有日誌輸出了。

4.有些日誌需要儲存到檔案中,Orhan Obut大神Logger也提供了相應的方法:

Logger.addLogAdapter(new DiskLogAdapter());

當然如果你要,只儲存指定Tag的Log日誌,就要初始化:

Logger.addLogAdapter(new AndroidLogAdapter() {
  @Override public boolean isLoggable(int priority, String tag) {
    return BuildConfig.DEBUG;
  }
});
設定完成這些以後,在sd下面就會看到儲存的log檔案了:

除此之外,你還可以利用Studio中的過濾器進行設定簡化輸出:

以上是我對Logger的簡單瞭解,不詳之處希望大家能夠諒解,不對之處,歡迎大家指出,以便共同學習之,文章最後為還在用eclipse的童鞋附上jar包。