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);
}