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
* 앞으로 관련해서 좀더 지능적인 로그로 수정이 가능함.(우선 기본적인 로그만 수정)