自定义的log打印函数(C版本,可选打印优先级,可定义模块标签,可打印所在行数,函数)

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

猜你喜欢

转载自blog.csdn.net/zhouchao_0321/article/details/82734218