_log.h
#ifdef __cplusplus
extern "C" {
#endif
#ifndef LOG_TAG
# define LOG_TAG "\t\t" // 这个是自定义的LOG的标识
#endif
#ifdef WIN32
int log_d(const char * format, ...);
int log_i(const char * format, ...);
int log_w(const char * format, ...);
int log_e(const char * format, ...);
int log_v(const char * format, ...);
# define LOGD log_d
# define LOGI log_i
# define LOGW log_w
# define LOGE log_e
# define LOGV log_v
#else // #ifdef WIN32
# include <jni.h>
# include <android/log.h> // 这个是输出LOG所用到的函数所在的路径
//Android.mk中要添加LOCAL_LDLIBS := -llog
//# 如果不包含这一句的话,会提示:__android_log_print 未定义
# define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) // 定义LOG类型
# define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) // 定义LOG类型
# define LOGW(...) __android_log_print(ANDROID_LOG_WARN,LOG_TAG,__VA_ARGS__) // 定义LOG类型
# define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) // 定义LOG类型
# define LOGV(...) __android_log_print(ANDROID_LOG_FATAL,LOG_TAG,__VA_ARGS__) // 定义LOG类型
#endif //#ifdef WIN32
//测试程序
void testLog(void);
#ifdef __cplusplus
};
#endif
_log.c
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include "_log.h"
#define BUFFER_SIZE (1024 * 1)
static char db_buffer[BUFFER_SIZE];
#ifdef WIN32
# define vsnprintf _vsnprintf
#endif //#ifdef WIN32
#define db_print(__tag, __p, __format) \
do { \
int n = 0; \
va_list args; \
va_start(args, __format); \
vsnprintf(db_buffer, BUFFER_SIZE - 1, __format, args); \
db_buffer[BUFFER_SIZE - 1] = 0; \
__p(__tag);\
n = __p(db_buffer); \
va_end(args); \
return n; \
} while (0)
int log_d(const char * format, ...)
{
db_print("debug: ", printf, format);
// return 0;
}
int log_i(const char * format, ...)
{
db_print("info : ", printf, format);
}
int log_w(const char * format, ...)
{
db_print("warn : ", printf, format);
}
int log_e(const char * format, ...)
{
db_print("error: ", printf, format);
}
int log_v(const char * format, ...)
{
db_print("verbose: ", printf, format);
}
//
//测试程序
void testLog(void)
{
LOGD("ddddddd = %d\n", __LINE__);
LOGI("iiiiiii = %d\n", __LINE__);
LOGW("wwwwwww = %d\n", __LINE__);
LOGE("eeeeeee = %d\n", __LINE__);
LOGV("vvvvvvv = %d\n", __LINE__);
}