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就可以了。