Android平臺Log輸出規範
1、 目的:
為了規範軟體工程師在android程式碼編寫過程中輸出Log的行為,使得釋出的產品中列印的Log是必須的,列印的Log的級別是能真實反映此Log對應的級別,標籤、Log內容具有很好的可讀性。
2、 適用範圍
android平臺java、c++、c程式碼編寫。
3、 Log的呼叫及等級介紹
(1)、Log的等級有Verbose,Debug,Info,Warn,Error。
(2)、java層呼叫:在java層呼叫import android.util.Log,在需要列印Log的地方執行Log.v,Log.d,Log.i,Log.w,Log.e.
(3)、c、c++層呼叫:在c,c++
(4)、各個Log等級的使用
Info:例如一些執行時的狀態資訊,這些狀態資訊在出現問題的時候能提供幫助。
Warn:警告系統出現了異常,即將出現錯誤。
Error:系統已經出現了錯誤。
Info、Warn、Error這三個等級的Log的警示作用依次提高,需要一直保留。這些資訊在系統異常時能提供有價值的分析線索。
4、 具體規則
(1)、Verbose等級的Log,請不要在user版本中出現。Verbose級別的Log輸出參見下面例子。
示例Java部分:
import android.os.Build;
import android.util.Log
final public Boolean isEng =Build.TYPE.equals("eng");
if (isEng)
Log.v(“LOG_TAG”,“LOG_MESSAGE”);
示例c、c++部分:
#include<cutils/log.h>
char value[PROPERTY_VALUE_MAX];
int isEng=0;
property_get("ro.build.type",value, "user");
isEng=strcmp(value, "eng");
if (isEng)
ALOGV();
(2)、Debug等級的log,預設不開啟,通過終端命令開啟。
Debug級別的log輸出參見下面例子。
示例Java部分:
import android.util.Log
final String TAG=”MyActivity”;
final public Boolean LOG_DEBUG = Log.isLoggable(TAG, Log.DEBUG);
if (LOG_DEBUG)
Log.d(“LOG_TAG”,“LOG_MESSAGE”);
執行時開啟log:在終端輸入:setprop log.tag.MyActivity DEBUG
執行時關閉log:在終端輸入:setprop log.tag.MyActivity INFO
示例c、c++部分:
#include<cutils/log.h>
#defineLOG_CTL“debug.MyActivity.enablelog”
charvalue[PROPERTY_VALUE_MAX];
int isDebug=0;
property_get(LOG_CTL,value, "0");
isDebug=strcmp(value,"1");
if (isDebug)
ALOGD();
執行時開啟log:在終端輸入:setpropdebug.MyActivity.enablelog 1
執行時關閉log:在終端輸入:setpropdebug.MyActivity.enablelog 0
(3)、Info、Warn、Error等級的Log禁止作為普通的除錯資訊使用,這些等級的Log是系統出現問題時候的重要分析線索,如果隨意使用,將給Log分析人員帶來極大困擾。請參考前面的等級介紹合理使用。
(4)、禁止使用new Exception("print trace").printStackTrace()或者Log. getStackTraceString(Exception)方式列印普通除錯資訊,因為這種方式列印Log非常消耗系統資源。此種方式列印Log一般只出現try..catch某個異常使用。
(5)、Log的tag命名,使用Activity名稱或者類、模組的名稱,不要出現自己的姓名拼音或其他簡稱。在c++/c程式碼中呼叫ALOGD等巨集函式,引數沒有傳入tag,需要在檔案頭部#define LOG_TAG"YOUR_TAG_NAME"。
(6)、Log的內容,不要出現公司名稱、個人名稱或相關簡稱,Log內容不要出現無意義的內容,如連續的等號或星號或連續的數字等,Log內容要方便其他分析Log的人員檢視。
(7)、Log輸出的頻率需要控制,例如1s列印一次的Log,儘量只在eng版本使用,user版本如需開啟,請預設關閉,通過設定setprop命令來開啟。