如何在Android jni中使用Log

2014-02-18 17:37:00 by suphy

打开Android C/C++文件中的Log

方法一:

  1. 在Android.mk文件中加入:LOCAL_LDLIBS := -llog
  2. 在要使用log的cpp文件中加入:
#include <utils/Log.h>
#define LOG_TAG "TAGNAME"
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE,LOG_TAG,__VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
  1. 在需要打印log的地方使用: LOGD("************")

注: 当然也可以在程序中直接使用__android_log_print打印log,无须定义宏;

方法二:

Android4.1中,log有了一些打印,具体可以参考system/core/include/cutils/log.h,该文件中定义了控制那些log输出的宏。

Android的编译参数中,加入了-DNDEBUG,也就是默认no debug; 当-DNDEBUG被打上后,默认ALOGV会被禁止; 但是我们可以使用 LOG_NDEBUGLOG_NIDEBUGLOG_NDDEBUG这三个宏控制LOG_PRI(priority, tag, ...)

可以一次打开LOGV,LOGI,LOGD,也可以分别打开:

#undef NDEBUG            //打开LOGV/LOGI/LOGD

#define LOG_NDEBUG   0   //打开LOGV
#define LOG_NIDEBUG  0   //打开LOGI
#define LOG_NDDEBUG 0    //打开LOGD

举例:

果要看AndroidRuntime的LOGI和LOGD,可以有这样2种写法:

第一种:

NDEBUG - LOG_NDEBUG = LOG_NIDEBUG + LOG_NIDEBUG

#define LOG_TAG "AndroidRuntime"
#undef NDEBUG
#define LOG_NDEBUG 1
#include <utils/Log.h>

第二种:

G_NIDEBUG + LOG_NIDEBUG

#define LOG_TAG "AndroidRuntime"
#define LOG_NIDEBUG 0
#define LOG_NDDEBUG 0
#include <utils/Log.h>

Comments