log打印函数,功能如讲解如下:
1 可控制宏DEBUG决定log,输出等级,默认为3,输出ULOGE,ULOGW,ULOGI
2 宏LOG_TAG输出log所在的模块,可将此宏放到makefile中或.h中或.cpp赋值,
3 输出log等级,所在模块信息,所在行数,所在函数,及可添加的任意参数及信息
详细代码:
xxx.h
#include <stdio.h>
#include <stdarg.h>
//#define DEBUG 2 //可配置log等级,可将此变量放到makefile文件中配置, 0:无log, 注掉使用默认log
///#define LOG_TAG "NONE" //输出log所在的模块,可将此宏放到makefile中赋值
#if defined(DEBUG) //defined而不是define
#define DEBUGLEVEL DEBUG
#else
#define DEBUGLEVEL 0x07 //默认log等级,打印 LOG_ERR LOG_WARN LOG_INFO
#endif
/*debug levels*/
#define LOG_ERR 0x00
#define LOG_WARN 0x01
#define LOG_INFO 0x02
#define LOG_DEBUG 0x03
#define ULOGE(x...) dprintf_msg(LOG_ERR, x)
#define ULOGW(x...) dprintf_msg(LOG_WARN, x)
#define ULOGI(x...) dprintf_msg(LOG_INFO, x)
#define ULOGD(x...) dprintf_msg(LOG_DEBUG, x)
#define dprintf(level, x...) do{\
if(level < DEBUGLEVEL) \
printf(x); \
}while(0)
int dprintf_info(int level, const char *module, const char *pfun, const int line, const char *fmt, ...);
#define dprintf_msg(level, x...) do{\
if(0x01<<level & DEBUGLEVEL) \
dprintf_info(level, LOG_TAG, __FUNCTION__, __LINE__, x); \
}while(0)
xxx.c
#include "debug.h"
static char sprintf_buf[1024];
static const char *log_level[4] ={"ERROR", "WARN", "INFO", "DEBUG"};
/*打印函数,module:函数所在模块*/
int dprintf_info(int level, const char *module, const char *pfun, const int line, const char *fmt, ...)
{
va_list args;
int n;
va_start(args, fmt);
n = vsnprintf(sprintf_buf, sizeof(sprintf_buf), fmt, args);
printf("[%s][%s][%d]%s: %s", log_level[level], module, line, pfun, sprintf_buf);
va_end(args);
return n;
}
其他:如有错误,欢迎大家指正及交流。
源码下载地址:https://download.csdn.net/download/zhouchao_0321/10674641