如何写一个可以设置等级的打印log,类似于 Debug版本 和release版本。

C语言写一个通用的 error log打印的代码,简单实用;

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdarg.h>

/* LOG Level */
#define COM_LOG_NORMAL      0
#define COM_LOG_ERR_L3      1
#define COM_LOG_ERR_L2      2
#define COM_LOG_ERR_L1      3
#define COM_LOGLEVEL_MAX    3

/*-----------------------*
* DEBUG LOG MACRO	    *
*-----------------------*/

#ifndef LOG_NONE/*LOGNONE_SET*/
/* 设置最小 log 等级 */
#ifdef DEBUG /*DEBUG_SET_START*/
	#define LOG_VALID_MIN_DEBUG_LEVEL COM_LOG_NORMAL
#else

#ifdef LOGLEVEL3 /*LOG_LEVEL3*/
	#define LOG_VALID_MIN_DEBUG_LEVEL COM_LOG_ERR_L3
#else
	#define LOG_VALID_MIN_DEBUG_LEVEL COM_LOG_ERR_L1
#endif /*LOG_LEVEL3 */

#endif /*DEBUG_SET_END*/
#else
	#define LOG_VALID_MIN_DEBUG_LEVEL (COM_LOGLEVEL_MAX+1)

#endif /*LOGNONE_SET_END*/

/* 功能: 实现log打印级别的判断,当我们传入的log级别 a	*/
/*		  没有超过我们设置Log级别时,则log不打印	*/
/* 参数: a: 设置log的级别 			*/
/* 		  b: 外部传入要打印的内容	*/

#define com_dbglog_macro(a,b,...) \
	do{\
		if(a>=LOG_VALID_MIN_DEBUG_LEVEL){\
			com_dbglog_macro_func(a,__func__,__LINE__,b,##__VA_ARGS__);\
		}\
	}while(0)

/* 功能: 实现log的打印*/
void com_dbglog_func(unsigned int loglevel, const char *funcname, unsigned int line,\
				char *log, void *outdata, unsigned int data_len)
{
	printf("%.128s\n",log);
}

/* 功能: 实现 log的打印,传入的参数可以多个*/
void com_dbglog_macro_func(unsigned int loglevel, const char *funcname, unsigned int line, \
				char *log_before,...)
{
	char log[128];//设置打印log的长度
	va_list args;
	
	va_start(args,log_before);
	
	vsnprintf(log,128,log_before,args);
	
	va_end(args);

	com_dbglog_func(loglevel,
			funcname,
			line,
			log,
			NULL,
			0);
}

/*简单的实现而已*/
int main(int argc, char *argv[])
{
	com_dbglog_macro(COM_LOG_ERR_L1,"We knew the world would not be the same. Some people laughed. A few people cried. Most people were silent. n1=%d, n2=%d,n3=3",1,2);
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值