Computer

Android NDK logging

창천(蒼天) 2012. 10. 25. 09:18
1. 소스 코드에 다음 헤더 파일을 인크루드 한다.
 
#include <android/log.h>
 
2. Android.mk 파일 안에 LOCAL_LDLIBS 를 선언해준다.
LOCAL_LDLIBS := -llog
 
3. cpp, c 소스 안에 로그를 추가한다. 추가하는 방법은 다음과 같다.
 
__android_log_write(ANDROID_LOG_ERROR,"Tag","Message");
 
로그 레벨에 대한 정보를 보려면
build/platforms/android-1.5/common/include/android/log.h
 
를 열어서 다음 부분을 참조한다.
 
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;
 
#ifndef __ANDROID_LOG_H__
#define __ANDROID_LOG_H__
 
#include <android/log.h>
 
#define LOGV(...)   __android_log_print(ANDROID_LOG_VERBOSE, "libnav", __VA_ARGS__)
#define LOGD(...)   __android_log_print(ANDROID_LOG_DEBUG, "libnav", __VA_ARGS__)
#define LOGI(...)   __android_log_print(ANDROID_LOG_INFO, "libnav", __VA_ARGS__)
#define LOGW(...)   __android_log_print(ANDROID_LOG_WARN, "libnav", __VA_ARGS__)
#define LOGE(...)   __android_log_print(ANDROID_LOG_ERROR, "libnav", __VA_ARGS__)
 
#endif /* __ANDROID_LOG_H__ */

4. WTF::String의 경우 아래와 같이 logging 가능

WTF::String plainText;
__android_log_print(ANDROID_LOG_DEBUG,"Tag", "plainText = [%s]", plainText.utf8().data() );


* 쉽게 사용하는 방법

#include "android/log.h"

__android_log_print(ANDROID_LOG_DEBUG, "TAG", "TEST[%x]", a_nData);

 

위 로그를 쉽게 관리하기 위해서 아래의 방안을 고려하여 구현해보았다. NDK로 개발시 도움이 될 것 같다. 


 

[Macro 기능 관련]

 * 작성일 : 2010.01.06

 * 작성자 : 조재화

 * Macro 관련 파일 위치 : Polaris7_Core/SDK/Porting/InterfaceImp_Android/AndroidLogDef.h

 * 로그 Macro 작성이유

  * 로그로 인한 속도 장애

  * 현재 너무 많은 로그로 인한 디버깅 어려움

 * 구조

  * AndroidLogDef.h 파일에서 로그옵션을 On/Off 가능

  * Macro를 이용하여 함수명, 라인수 를 추가적으로 출력

{{{

#define ANDLOID_LOG_OUT(prio, tag, a, args...) \

__android_log_print(prio, tag, "[%s][%d]"#a"",__FUNCTION__, __LINE__, ##args);

}}}

  * Log 종류 

   * ANDLOID_LOG_OUT : default log

   * PORTING_LOG_OUT : Porting log

   * ... (각 필요에 맞게 Macro를 수정하면 된다.)

 * 사용법

  * 로그 On/Off

   * ANDLOID_LOG_OUT 메크로 

     * On : #define USE_ANDROID_LOG_OUT 

     * Off : #undef USE_ANDROID_LOG_OUT 

   * PORTING_LOG_OUT 메크로 

     * On : #define USE_PORTING_LOG_OUT

     * Off : #undef USE_PORTING_LOG_OUT

 * 앞으로 관련해서 좀더 지능적인 로그로 수정이 가능함.(우선 기본적인 로그만 수정)