最简单跨平台的日志库

这里是我之前最常用的日志库的代码,所有操作几乎都是通过宏实现。只需要修改 fprintf 的参数就可以很容易的重定向的不同的文件或者终端。

具有以下特点:

  1. 代码简单易懂,全部是宏的实现
  2. 跨平台,支持Android,Linux,macOS,Windows
  3. 易扩展,只需要简单的封装就可以日志实现重定向
  4. 用户友好,不同级别日志显示,具有不同的颜色。

code:

#include <stdlib.h>
#include <stdio.h>

/* stream related */
#if defined(DEBUG)
#define log_print(fmt, arg...)		do{ fprintf(stdout, "[%s:%04d] "fmt"\r\n", __FILE__, __LINE__, ##arg); }while(0);
#define log_debug(fmt, arg...)      {log_print("\033[47;30m""Debug: "fmt"\033[0m", ##arg);}
#else
#define log_print(fmt, arg...) 		do{ fprintf(stdout, fmt"\r\n", ##arg); }while(0);
#define log_debug(fmt, arg...)
#endif
#define log_warn(fmt, arg...)       {log_print("\033[40;33m""Warn: "fmt"\033[0m", ##arg);}
#define log_error(fmt, arg...)      {log_print("\033[40;31m""Error: "fmt"\033[0m", ##arg);}
#define log_fatal(fmt, arg...)      {log_print("\033[41;37m""Fatal: "fmt"\033[0m", ##arg); abort();}
#define log_info(fmt, arg...)       {log_print("\033[40;37m"fmt"\033[0m", ##arg);}
#define log_verbose(fmt, arg...)    {if(verbose) log_print("\033[40;37m"fmt"\033[0m", ##arg);}

/* global variable */
static int verbose = 1;

//#define copy_bit(u1, u2) {(u1) = (u2);}
//#define test_bit(u32, n) {(u32) & 1<<n;}
//#define set_bit(u32, n) {(u32) = (u32) | 1<<(n);}
//#define clr_bit(u32, n) {(u32) = (u32) & ~(1<<(n));}
//#define cln_bit(u32) {(u32) &= 0;}

/* macros */
//#define ARRAY_SIZE(u) (sizeof(u)/sizeof(u[0]))
//#define return_if_fail(cond) {if (!(cond)) return;}
//#define return_val_if_fail(cond, val) {if (!(cond)) return (val);}

/* version info */
#define MAJOR 1
#define MINOR 2
#define REVISION 3

#define STRINGIFY_HELPER(v) #v
#define STRINGIFY(v) STRINGIFY_HELPER(v)
#define VERSION_STRING() STRINGIFY(MAJOR) "." \
                         STRINGIFY(MINOR) "." \
                         STRINGIFY(REVISION)
#define VERSION_CODE() (MAJOR << 16 + MINOR << 8 + REVISION)
int main(int argc, char **argv)
{
    log_info("version string: %s", VERSION_STRING());
    log_info("version code: %d", VERSION_CODE());
    log_info("info");
    log_verbose("verbose");
    log_warn("warn");
    log_error("error");
    log_debug("debug");
    log_fatal("fatal");

    return 0;
}

最终结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值