【C/C++】实现日志格式化

在C语言中,可以使用宏来自动填充文件名和行号。以下是一个自动填充文件名和行号的日志格式化的C语言代码实例:



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

#define LOG_INFO(format, ...) log_info(__FILE__, __LINE__, format, ##__VA_ARGS__)
#define LOG_ERROR(format, ...) log_error(__FILE__, __LINE__, format, ##__VA_ARGS__)

static inline void log_info(const char *file, int line, const char *format, ...)
{
    time_t now = time(NULL);
    struct tm *tm_now = localtime(&now);
    char time_str[20];
    strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", tm_now);

    printf("[%s] [INFO] [%s:%d] ", time_str, file, line);

    va_list args;
    va_start(args, format);
    vprintf(format, args);
    va_end(args);
}

static inline void log_error(const char *file, int line, const char *format, ...)
{
    time_t now = time(NULL);
    struct tm *tm_now = localtime(&now);
    char time_str[20];
    strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", tm_now);

    printf("[%s] [ERROR] [%s:%d] ", time_str, file, line);

    va_list args;
    va_start(args, format);
    vprintf(format, args);
    va_end(args);
}
#endif

在这个代码实例中,定义了两个宏LOG_INFO和LOG_ERROR,分别用于输出INFO和ERROR级别的日志。这些宏使用了可变参数宏的特性,可以自动填充文件名和行号。在调用LOG_INFO和LOG_ERROR时,只需要传递格式化字符串和参数列表即可。这种方式可以方便地实现日志的格式化和输出,并且可以自动填充文件名和行号,减少了代码的重复性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值