实现自己的日志打印系统

一、背景

c库都有现成的打印函数可用,为什么还要实现自己的打印函数?原因很简单,实现自己的打印函数除了可以实现自己需求的打印格式,还有很多优点,可以实现打印开关控制和优先级控制,还可以根据需要添加自己的功能。
你在调试的时候,增加一个宏开关,就可以打开或关闭,维护起来更方便,如下面的代码。

二、实例

当我们定义DEBUG开关宏时,LOG()函数实现正常的打印功能;当我们删掉这个DEBUG宏时,LOG()函数就是一个空函数。通过这个宏,我们实现了打印函数的开关功能。
除此之外,我们还可以设置一些打印等级。可以分为ERROR、WARNNING、INFO等打印等级。

#include <stdio.h>

#include <stdarg.h>

#define ERR_LEVEL 1
#define WARN_LEVEL 2
#define INFO_LEVEL 3

#define DEBUG_LEVEL 3 //打印等级的设置
/*
0:关闭打印
1:只打印错误信息
2:打印警告和错误信息
3:打印所有信息
*/

void attribute((format(printf,1,2))) INFO(char *fmt,…)
{
#if(DEBUG_LEVEL >= INFO_LEVEL)
va_list args;
va_start(args,fmt);
vprintf(fmt,args);
va_end(args);
#endif
}

void attribute((format(printf,1,2))) WARN(char *fmt,…)
{
#if(DEBUG_LEVEL >= WARN_LEVEL)
va_list args;
va_start(args,fmt);
vprintf(fmt,args);
va_end(args);
#endif
}

void attribute((format(printf,1,2))) ERR(char *fmt,…)
{
#if(DEBUG_LEVEL >= ERR_LEVEL)
va_list args;
va_start(args,fmt);
vprintf(fmt,args);
va_end(args);
#endif
}

int main(void)
{
ERR(“ERR log level:%d\n”,1);
WARN(“WARN log level: %d\n”,2);
INFO(“INFO log level:%d\n”,3);
return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王先森001

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

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

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

打赏作者

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

抵扣说明:

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

余额充值