1. 程式人生 > >Android - Log的等級: Verbose,Debug,Info,Warn,Error - ALOGV,ALOGD,ALOGI,ALOGW,ALOGE

Android - Log的等級: Verbose,Debug,Info,Warn,Error - ALOGV,ALOGD,ALOGI,ALOGW,ALOGE

Android - Log的等級: Verbose,Debug,Info,Warn,Error - ALOGV,ALOGD,ALOGI,ALOGW,ALOGE

2016年11月27日 15:18:51 ztguang 閱讀數:4848

 

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命令來開啟。