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