0 Java層提供了Log.i, log.d, log.e ...
1 C++ 則有 ALOGW, ALOGE, ALOGI ...
/*
* Android log priority values, in ascending priority order.
*/
typedef enum android_LogPriority {
ANDROID_LOG_UNKNOWN = 0,
ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */
ANDROID_LOG_VERBOSE,
ANDROID_LOG_DEBUG,
ANDROID_LOG_INFO,
ANDROID_LOG_WARN,
ANDROID_LOG_ERROR,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */
} android_LogPriority;
#define LOG_NDEBUG 0 // 設置debug 級別爲0, 則LOGV, LOGI, 等全部生效
#define LOG_TAG "keyword"
#include <cutils/log.h>
LOGD("%s() in %s, Line: %d\n", __func__, __FILE__, __LINE__);
2 如果是我們在使用Native C在做的時候,實際上也是可以利用LOG來輸出調試信息的。查看方式一樣。
2.1 方法1
#include <utils/Log.h>我們查看這個文件system/core/include/cutils/log.h
#ifndef LOG_TAG
#define LOG_TAG NULL
#endif
對於這個詞我們的敏感度,我們知道,需要設置TAG信息。
那麼我們可肯定是需要在使用這個log.h前,定義一個LOG_TAG
那麼在Native C中我們常用的做法如下
#define LOG_TAG "keyword"
#include <utils/Log.h>
然後使用LOGI,LOGD,LOGV,LOGW,LOGE來輸出log信息,例如
LOGD("%s() in %s, Line: %d\n", __func__, __FILE__, __LINE__);
然後在adb shell 中使用
logcat -s keyword
即可查看到 LOG_TAG 爲 "keyword" 的debug信息
2.2 方法2
2.2.1 在對應的mk文件中加入LOCAL_LDLIBS := -llog
2.2.2 在要使用LOG的cpp文件中加入
#include <android/log.h>
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, "keyword", __VA_ARGS__)
2.2.3 這樣就可以使用
LOGD("%s() in %s, Line: %d\n", __func__, __FILE__, __LINE__);
這樣,在logcat端看到的輸出是
D/keyword( 32): ......
如果想改變輸出中的各項內容,可以參考相應顏色的標示,比如,如果想定義LOGE,就可以把上面的ANDROID_LOG_DEBUG改成ANDROID_LOG_ERROR,同理,LOGI什麼的也都以此類推
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "keyword", __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , "keyword", __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO , "keyword", __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN , "keyword", __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , "keyword", __VA_ARGS__)
當然,如果不嫌麻煩,也可以直接使用__android_log_print函數,而不define定義LOGxxx