ㅈㅅㄹ

어떻게 보면 당연한 말이지만, 안드로이드 Java 단에서의 android.util.Log 클래스에서 제공하는 로그 기능을 Native단에서도 이용할 수 있다. 보통 LOGX (X는 severity를 지정) 라는 매크로를 정의해서 쓰며 해당 소스에서 이게 정의가 되어 있지 않다면 다음과 같이 소스에 정의하고 쓰면 된다.

#include <android/log.h>
#define  LOG_TAG "MyLogTag"
#define  LOGE(...) \
           __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#define  LOGW(...) \
           __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__)
#define  LOGI(...) \
           __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define  LOGD(...) \
           __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
#define  LOGV(...) \
           __android_log_print(ANDROID_LOG_VERBOSE,LOG_TAG,__VA_ARGS__)

LOG_TAG 는 원하는 이름의 필터를 지정해서 쓰면 되겠다.

참고로 system/core/include/android/log.h 에 보면 다음과 같이 severity가 정의되어 있다

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;

이후 eclipse의 DDMS에서 log를 확인하거나, adb shell을 사용해서 에뮬레이터나 장비에 연결한 다음 logcat을 써서 Native에서 입력한 log가 출력되는 것을 볼 수 있다.