Android開發基礎 -- Log日誌 解釋 和 封裝
在Android開發中,日誌列印是一項必不可少的操作,我們通過分析列印的日誌可以分析程式的執行資料和情況。
在程式中輸出日誌, 使用 android.util.Log 類.
該類提供了若干靜態方法,常用的方法有以下5個:
Log.v(String tag, String msg);
Log.d(String tag, String msg);
Log.i(String tag, String msg);
Log.w(String tag, String msg);
Log.e(String tag, String msg);
根據首字母對應等級有
1、Log.v 的除錯顏色為黑色的,任何訊息都會輸出,這裡的v代表verbose冗長的,囉唆的意思,平時使用就是Log.v("","");
2、Log.d 的輸出顏色是藍色的,僅輸出debug除錯的意思,但他會輸出上層的資訊,過濾起來可以通過DDMS的Logcat標籤來選擇.
3、Log.i 的輸出為綠色,一般提示性的訊息information,它不會輸出Log.v和Log.d的資訊,但會顯示i、w和e的資訊
4、Log.w 的意思為橙色,可以看作為warning警告,一般需要我們注意優化Android程式碼,同時選擇它後還會輸出Log.e的資訊。
5、Log.e 為紅色,可以想到error錯誤,這裡僅顯示紅色的錯誤資訊,這些錯誤就需要我們認真的分析,檢視棧的資訊了。
tag 是一個標識, 可以是任意字串,通常可以使用 “類名”或 “類名+方法名”, 主要是用來在 檢視日誌時提供一個篩選條件. 如:
// 在MainActivity類中
private static final String LOGTAG = "MainActivity";
注意:Info、Warn、Error這三個等級的Log的警示作用依次提高,需要一直保留。這些資訊在系統異常時能提供有價值的分析線索
當然,很多初學者開始時喜歡用 System.out.println
不建議用的原因這個就太多了,比如日誌列印不可控制、列印時間無法確定、不能新增過濾器、日誌沒有級別區分…
注意: 在版本釋出的時候,要取消所有log,而不關閉log的風險包括,你列印的東西太多 和 列印的東西有可能空指標異常之類的。
所以,如果一個個的刪除log就太苦逼了,
最簡單的方法就是,你封裝一下log,改一下開關就能關閉所有的log。
這裡,寫下簡單日誌封裝類:
/**
* log日誌封裝
*/
public final class CLog {
/**
* 是否要輸出日誌,把這裡改成 “true”或“false”即可
*/
public static final boolean DEBUG = true;
private CLog() {
}
public static void d(String tag, String desc) {
if (DEBUG)
Log.d(tag, desc);
}
public static void d(String tag, String desc, Throwable tr) {
if (DEBUG)
Log.d(tag, desc, tr);
}
public static void v(String tag, String desc) {
if (DEBUG)
Log.v(tag, desc);
}
public static void v(String tag, String desc, Throwable tr) {
if (DEBUG)
Log.v(tag, desc);
}
public static void w(String tag, String desc) {
if (DEBUG)
Log.w(tag, desc);
}
public static void w(String tag, Throwable ioe) {
if (DEBUG)
Log.w(tag, ioe);
}
public static void w(String tag, String desc, Throwable e) {
if (DEBUG)
Log.w(tag, desc, e);
}
public static void i(String tag, String desc) {
if (DEBUG)
Log.i(tag, desc);
}
public static void i(String tag, String desc, Throwable tr) {
if (DEBUG)
Log.i(tag, desc, tr);
}
public static void e(String tag, String desc) {
if (DEBUG)
Log.e(tag, desc);
}
public static void e(String tag, String desc, Throwable tr) {
if (DEBUG)
Log.e(tag, desc, tr);
}
}
另外推薦一個好用的第三方開源日誌庫logger,詳細介紹請看下面這篇文章:
一個簡單、漂亮、功能強大的Android日誌程式:logger
logger專案主頁:http://www.open-open.com/lib/view/home/1427166371418
logger支援下面輸出:
Logger.d("hello");
Logger.e("hello");
Logger.w("hello");
Logger.v("hello");
Logger.wtf("hello");
Logger.json(JSON_CONTENT);//支援了Json哦
Logger.xml(XML_CONTENT);//支援XML
Logger.log(DEBUG, "tag", "message", throwable);