1. 程式人生 > >Android開發基礎 -- Log日誌 解釋 和 封裝

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);

根據首字母對應等級有 

Verbose,DebugInfoWarningError

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

輸出;過在真正的專案開發中,是極度不建議使用System.out.println()方法的!如果你在公司的專案中經常使用這個方法,就很有可能要捱罵了。這是標準的Java輸出方法,這裡進行列舉,目的是為了提醒大家不用

不建議用的原因這個就太多了,比如日誌列印不可控制、列印時間無法確定、不能新增過濾器、日誌沒有級別區分…


注意: 在版本釋出的時候,要取消所有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);