Zlog 日志框架——多参数宏

//zlog 日志框架
#include<stdio.h>

// #define OPEN_LOG 1
int main()
{
	printf("app start \n");
	#ifdef OPEN_LOG
	printf("app start \n");
	#endif
	return 0;
} 

可变参函数

//zlog 日志框架
#include<stdio.h>
#include<stdarg.h>

// #define OPEN_LOG 1
// 变参函数
void test(int a,int b){
	printf("%d %d\n",a,b); 
} 
void test_1(char *fmt,...){
	va_list arg1;
	va_start(arg1,fmt);
	
	printf("%d \n",va_arg(arg1,int));
	printf("%d \n",va_arg(arg1,int));
	printf("%d \n",va_arg(arg1,int));
	
	va_end(arg1);
	
}
int main()
{
	int a=10,b=11;
	test(a,b);
	test_1("",a,b,10);
	printf("app start \n");

	return 0;
} 

  自己实现printf函数,控制打印开关

//zlog 日志框架
#include<stdio.h>
#include<stdarg.h>

#define OPEN_LOG 1
// 变参函数

void EM_LOG(char *fmt,...){
		#ifdef OPEN_LOG
	va_list arg;
	va_start(arg,fmt);
	char buf[1+vsnprintf(NULL,0,fmt,arg)];// 把日志打印到buff里面去,最终返回的是长度
	vsnprintf(buf,sizeof(buf),fmt,arg);
	
	va_end(arg);
	printf("%s\n",buf);
	#endif	
}
int main()
{
	int a=10,b=11;
	EM_LOG("app start");	
	EM_LOG("A = %d",a);
	return 0;
} 

日志等级打印

//zlog 日志框架
#include<stdio.h>
#include<stdarg.h>

#define OPEN_LOG 1
#define LOG_LEVEL LOG_DEBUG
// 变参函数

typedef enum{
	LOG_DEBUG=0,
	LOG_INFO,
	LOG_WARN,
	LOG_ERROR,
}E_LOGLEVEL; 

char* EM_LOGLevelGet(const int level){
	if(level==LOG_DEBUG){
		return "DEBUG";
	}else if(level==LOG_INFO){
		return "INFO";
	}else if(level==LOG_WARN){
		return "LOG_WARN";
	}else if(level==LOG_ERROR){
		return "LOG_ERROR";
	}
	return "UNKONWN";
}
void EM_LOG(const int level,char *fmt,...){
		#ifdef OPEN_LOG
	va_list arg;
	va_start(arg,fmt);
	char buf[1+vsnprintf(NULL,0,fmt,arg)];// 把日志打印到buff里面去,最终返回的是长度
	vsnprintf(buf,sizeof(buf),fmt,arg);
	
	va_end(arg);
	if(level>=LOG_LEVEL){
		printf("[%s] %s\n",EM_LOGLevelGet(level),buf);	
	}
	#endif	
}
int main()
{
	int a=10,b=11;
	EM_LOG(LOG_DEBUG,"app start");	
	EM_LOG(LOG_INFO,"A = %d",a);
	
	// 错误设置不同等级 INFO WARN ERROR
	 
	return 0;
} 

添加行数

//zlog 日志框架
#include<stdio.h>
#include<stdarg.h>

#define OPEN_LOG 1
#define LOG_LEVEL LOG_DEBUG
// 变参函数

typedef enum{
	LOG_DEBUG=0,
	LOG_INFO,
	LOG_WARN,
	LOG_ERROR,
}E_LOGLEVEL; 

char* EM_LOGLevelGet(const int level){
	if(level==LOG_DEBUG){
		return "DEBUG";
	}else if(level==LOG_INFO){
		return "INFO";
	}else if(level==LOG_WARN){
		return "LOG_WARN";
	}else if(level==LOG_ERROR){
		return "LOG_ERROR";
	}
	return "UNKONWN";
}
void EM_LOG(const int level,const char* fun,const int line,char *fmt,...){
		#ifdef OPEN_LOG
	va_list arg;
	va_start(arg,fmt);
	char buf[1+vsnprintf(NULL,0,fmt,arg)];// 把日志打印到buff里面去,最终返回的是长度
	vsnprintf(buf,sizeof(buf),fmt,arg);
	
	va_end(arg);
	if(level>=LOG_LEVEL){
		printf("[%s] [%s %d] %s\n",EM_LOGLevelGet(level),fun,line,buf);	
	}
	#endif	
}
#define EMLog(level,fmt...) EM_LOG(level,__FUNCTION__,__LINE__,fmt) 
int main()
{
	int a=10,b=11;
	EMLog(LOG_DEBUG,"app start");	
	//EM_LOG(LOG_INFO,"A = %d",a);
	
	// 错误设置不同等级 INFO WARN ERROR
	 
	return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉月松心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值