1. 程式人生 > >Android平臺Log輸出規範

Android平臺Log輸出規範

1、 目的:

為了規範軟體工程師在android程式碼編寫過程中輸出Log的行為,使得釋出的產品中列印的Log是必須的,列印的Log的級別是能真實反映此Log對應的級別,標籤、Log內容具有很好的可讀性。

2、 適用範圍

android平臺javac++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)cc++層呼叫:在c,c++

層包含此標頭檔案:#include <cutils/log.h>,在需要呼叫Log的地方執行:ALOGV,ALOGD,ALOGI,ALOGW,ALOGE

(4)、各個Log等級的使用

Info:例如一些執行時的狀態資訊,這些狀態資訊在出現問題的時候能提供幫助。

Warn:警告系統出現了異常,即將出現錯誤。

Error:系統已經出現了錯誤。

InfoWarnError這三個等級的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_CTLdebug.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)、InfoWarnError等級的Log禁止作為普通的除錯資訊使用,這些等級的Log是系統出現問題時候的重要分析線索,如果隨意使用,將給Log分析人員帶來極大困擾。請參考前面的等級介紹合理使用。

(4)、禁止使用new Exception("print trace").printStackTrace()或者Log. getStackTraceString(Exception)方式列印普通除錯資訊,因為這種方式列印Log非常消耗系統資源。此種方式列印Log一般只出現try..catch某個異常使用。

5)、Logtag命名,使用Activity名稱或者類、模組的名稱,不要出現自己的姓名拼音或其他簡稱。在c++/c程式碼中呼叫ALOGD等巨集函式,引數沒有傳入tag,需要在檔案頭部#define LOG_TAG"YOUR_TAG_NAME"

6)、Log的內容,不要出現公司名稱、個人名稱或相關簡稱,Log內容不要出現無意義的內容,如連續的等號或星號或連續的數字等,Log內容要方便其他分析Log的人員檢視。

7)、Log輸出的頻率需要控制,例如1s列印一次的Log,儘量只在eng版本使用,user版本如需開啟,請預設關閉,通過設定setprop命令來開啟。