http://blog.csdn.net/liuxd3000/article/details/13768141
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++層包含此頭檔案:#include <cutils/log.h>,在需要調用Log的地方執行:ALOGV,ALOGD,ALOGI,ALOGW,ALOGE。
(4)、各個Log等級的使用
Verbose: 開發調試過程中一些詳細資訊,不應該編譯進産品中,隻在開發階段使用。(參考api文檔的描述:Verbose should never be compiled into anapplication except during development)
Debug: 用于調試的資訊,編譯進産品,但可以在運作時關閉。(參考api文檔描述:Debug logs are compiled in but stripped atruntime)
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指令來開啟。