編輯:Android開發環境
日志是故障處理最重要的部分,但是它難以實現,特別是在那些使用兩個不同機器進行開發和執行的移動平台上。Android有一個擴展日志框架,用於對系統范圍內Android系統本身的信息及應用程序的信息集中做日志。它還提供了一組用戶級應用程序以查看和過濾這些日志。
Android 日志框架是名字為logger的內核模塊。隨時隨地地對平台上的任何信息進行日志會產生大量信息,從而使得查看和分析這些日志變得非常困難。為了簡化這個過程,Android日志框架把日志消息分成4個日志緩沖區:
Main 主要應用程序的日志信息
Event 系統事件
Radio Radio 相關的日志信息
System 調試時產生的低級系統調試信息
這4個緩沖區以偽設備的形式保存在dev/log系統目錄下。因為移動平台上的I/O操作代價很大,所以日志信息要保存在內
存中,而不能保存在永久性存儲器(例如磁盤中)。為了有效的控制對存儲日志信息的保存在內存中
存儲空間的充分利用
MAIN,RADIO,SYSTEM 64kb
256KB 的日志緩沖區
開發者不希望直接與logger內核模塊進行交互,Android運行庫系統提供了一組API調用以便於java代碼和原生代碼想logger內核模塊發送日志信息。通過android/log.h頭文件來展示原生代碼的日志API。為了使用日志函數,原生代碼需要先向包含該頭文件。
#include
除了要包含合適的頭文件,還需要動態修改Android.mk文件從而將原生模塊與日志庫進行鏈接,可以通過使用構建系統變量LOCAL_LDLIBS完成操作,
LOCAL_LALIBS += -llog
此語法必須在include前面
日志消息
通過日志API發送給logger模塊的每個日志條目都具有以下字段:
Priority:取值分別為verbose,debug,info,warning,error和fatal,表示日志的重要程度,支持的日志優先級在
android/log.h頭文件中聲明,
支持的日志優先級
C++代碼生成簡單的日志消息
C++代碼生成格式化的日志消息
C++代碼參數分別是日志優先級,日志標簽和日志消息
_android_log_vprint:粗糊了參數傳遞方式外,其他功能與_android_log_print 函數完全相同,_android_log_vprint函
數用va_list傳遞附加參數,而_android_log_print函數中以連續參數的凡是改為傳遞參數,如果想要調用日志函數時傳遞給當
前函數的參數個數動態變化時,該函數的優勢就會體現出來。
C++代碼