14 3 定製自己的日誌工具

2021-10-08 11:36:26 字數 1422 閱讀 9453

早在1.4 節中我們就已經學過了 android 日誌工具的用法,並且日誌工具也確實貫穿了我們整本書的學習。雖然 android 中自帶的日誌工具功能非常強大,但也不能說是完全沒有缺點,例如在列印日誌的控制方面就做得不夠好。

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

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

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

object  logutil 

}fun d(tag: string,msg:string)

}fun i(tag: string,msg:string)

}fun w(tag: string,msg:string)

}fun e(tag: string,msg:string)

}}

可以看到,我們在 logutil 中先是定義了 verbose、debug、info、warn、error 這5 個整型常量,並且它們對應的值都是遞增的。然後又定義了乙個靜態變數 level,可以將它的值指定為上面5 個常量中的任意乙個。

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

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

logutil.e("tag","debug log")
列印一行 warn 級別的日誌就可以這樣寫:

logutil.w("tag","warn log")
然後我們只需要修改 level 變數的值,就可以自由地控制日誌的列印行為了。比如讓 level 等於 verbose 就可以把所有的日誌都列印出來,讓 level 等於 error 就可以只列印程式的錯誤日誌。

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

定製自己的日誌工具

雖然 android 中自帶的日誌工具功能非常強大,但也不能說是完全沒有缺點,例如在列印日誌的控制方面就做得不夠好。打個比方,你正在編寫乙個比較龐大的專案,期間為了方便除錯,在 的很多地方都列印了大量的日誌。最近專案已經基本完成了,但是卻有乙個非常讓人頭疼的問題,之前用於除錯的那些日誌,在專案正式上...

定製自己的日誌工具

為什麼需要定製自己的日誌工具呢?難得安卓自帶的log不好嗎?雖然 android 中自帶的日誌工具功 能非常強大,但也不能說是完全沒有缺點,例如在列印日誌的控制方面就做得不夠好。打個比方,你正在編寫乙個比較龐大的專案,期間為了方便除錯,在 的很多地方都 列印了大量的日誌。最近專案已經基本完成了,但是...

定製自己的工具類

定製自己的列印資訊類,方便除錯,如下 package dyk.viewpagerdemo.log import android.util.log created by administrator on 2017 04 28.日誌工具類 在軟體上線後,讓level 等於 nothing就要行了 除錯的...