一个极其简陋的C/C++日志工具

31 篇文章 1 订阅

总用printf来打日志的话,到后面删除起来太麻烦,所以自己写了几个函数来代替printf。其实也就是把printf包装了一下,然后利用宏根据编译选项是否含有-DDEBUG来判断是否把宏展开为功能代码。代码如下:

//log.h
#ifndef LOG_H_INCLUDED
#define LOG_H_INCLUDED

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

#ifdef DEBUG
#define INFO(...) info(__VA_ARGS__)
#define WARN(...) warn(__VA_ARGS__)
#define ERROR(...) error(__VA_ARGS__)
#else
#define INFO(...) {}
#define WARN(...) {}
#define ERROR(...) {}
#endif

extern const char *_log_blue;
extern const char *_log_yellow;
extern const char *_log_red;
extern const char *_log_clear;

extern void info(const char *fmt, ...);
extern void warn(const char *fmt, ...);
extern void error(const char *fmt, ...);

#endif // LOG_H_INCLUDED
//log.c
#include "log.h"

const char *_log_blue    = "\033[34m";  //color for info
const char *_log_yellow  = "\033[33m";  //color for warn
const char *_log_red     = "\033[31m";  //color for error
const char *_log_clear   = "\033[0m";   //color for normal

void info(const char *fmt, ...)
{
    char fullfmt[strlen(fmt) + 30];
    strcpy(fullfmt, _log_blue);
    strcat(fullfmt, "[INFO] ");
    strcat(fullfmt, fmt);
    strcat(fullfmt, _log_clear);
    strcat(fullfmt, "\n");

    va_list ap;
    va_start(ap, fmt);
    vfprintf(stderr, fullfmt, ap);
    va_end(ap);
}
void warn(const char *fmt, ...)
{
    char fullfmt[strlen(fmt) + 30];
    strcpy(fullfmt, _log_yellow);
    strcat(fullfmt, "[WARN] ");
    strcat(fullfmt, fmt);
    strcat(fullfmt, _log_clear);
    strcat(fullfmt, "\n");

    va_list ap;
    va_start(ap, fmt);
    vfprintf(stderr, fullfmt, ap);
    va_end(ap);
}
void error(const char *fmt, ...)
{
    char fullfmt[strlen(fmt) + 30];
    strcpy(fullfmt, _log_red);
    strcat(fullfmt, "[ERROR] ");
    strcat(fullfmt, fmt);
    strcat(fullfmt, _log_clear);
    strcat(fullfmt, "\n");

    va_list ap;
    va_start(ap, fmt);
    vfprintf(stderr, fullfmt, ap);
    va_end(ap);
}

如果编译选项有-DDEBUG,则INFO会展开为info(),否则展开为空大括号,这些日志函数的用法和一般的printf没什么区别,唯一的区别也就是加了颜色和前缀。
虽然写了三个不同级别的日志函数,但是目前并没有实现对日志级别的过滤,也没有实现输出到文件,如果需要的话再加了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值