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