1. 程式人生 > >Android 定製自己的日誌工具

Android 定製自己的日誌工具

https://www.cnblogs.com/guop/p/5066206.html

打個比方,你正在編寫一個比較龐大的專案,期間為了方便除錯,在程式碼的很多地方都列印了大量的日誌。最近專案已經基本完成了,但是卻有一個非常讓人頭疼的問題,之前用於除錯的那些日誌,在專案正式上線之後仍然會照常列印,這樣不僅會降低程式的執行效率,還有可能將一些機密性的資料洩露出去。

  那該怎麼辦呢,難道要一行一行把所有列印日誌的程式碼都刪掉?顯然這不是什麼好點子,不僅費時費力,而且以後你繼續維護這個專案的時候可能還會需要這些日誌。因此,最理想的情況是能夠自由地控制日誌的列印,當程式處於開發階段就讓日誌打印出來,當程式上線了之後就把日誌遮蔽掉。

  看起來好像是挺高階的一個功能,其實並不複雜,我們只需要定製一個自己的日誌工具就可以輕鬆完成了。比如新建一個LogUtil類,程式碼如下所示:

複製程式碼

/**
 * 自定義日誌類
 * 功能簡介:在專案中自由控制日誌列印,可以指定日誌列印級別,可以開關日誌列印
 * @author guopeng
 * @date 2015年12月22日
 */
public class LogUtil {

    public static final int VERBOSE = 1;
    public static final int DEBUG = 2;
    public static final int INFO = 3;
    public static final int WARN = 4;
    public static final int ERROR = 5;
    public static final int NOTHING = 6;
    public static final int LEVEL = VERBOSE;
    
    public static void v(String tag, String msg)
    {
        if(LEVEL <= VERBOSE)
        {
            Log.v(tag,msg);
        }
    }
    
    public static void d(String tag, String msg)
    {
        if(LEVEL <= DEBUG)
        {
            Log.d(tag,msg);
        }
    }
    
    public static void i(String tag, String msg)
    {
        if(LEVEL <= INFO)
        {
            Log.i(tag,msg);
        }
    }
    
    public static void w(String tag, String msg)
    {
        if(LEVEL <= WARN)
        {
            Log.w(tag,msg);
        }
    }
    
    public static void e(String tag, String msg)
    {
        if(LEVEL <= ERROR)
        {
            Log.e(tag,msg);
        }
    }
}

複製程式碼

可以看到,我們在LogUtil中先是定義了VERBOSE、DEBUG、INFO、WARN、ERROR、NOTHING這六個整型常量,並且它們對應的值都是遞增的。然後又定義了一個LEVEL常量,可以將它的值指定為上面六個常量中的任意一個。

接下來我們提供了v()、d()、i()、w()、e()這五個自定義的日誌方法,在其內部分別呼叫了Log.v()、Log.d()、Log.i()、Log.w()、Log.e()這五個方法來列印日誌,只不過在這些自定義的方法中我們都加入了一個if判斷,只有當LEVEL常量的值小於或等於對應日誌級別值的時候,才會將日誌打印出來。

這樣就把一個自定義的日誌工具建立好了,之後在專案裡我們可以像使用普通的日誌工具一樣使用LogUtil,比如列印一行DEBUG級別的日誌就可以這樣寫:

LogUtil.d("TAG", "debug log");

列印一行WARN級別的日誌就可以這樣寫:

LogUtil.w("TAG", "warn log");

然後我們只需要修改LEVEL常量的值,就可以自由地控制日誌的列印行為了。比如讓LEVEL等於VERBOSE就可以把所有的日誌都打印出來,讓LEVEL等於WARN就可以只打印警告以上級別的日誌,讓LEVEL等於NOTHING就可以把所有日誌都遮蔽掉。

使用了這種方法之後,剛才所說的那個問題就不復存在了,你只需要在開發階段將LEVEL指定成VERBOSE,當專案正式上線的時候將LEVEL指定成NOTHING就可以了。