记录 宏定义日志输出

介绍

开发过程中日志打印输出是极为重要的,这里记录下一种宏定义方式的日志输出,非常简单实用。如果需要更多功能的输出则需要进一步的二次开发,同时完善不同场景下的条件判断。

效果

直接上效果图。包含时间,日志级别,所在文件名、行数、函数名称,以及对应的具体信息
日志
输出

具体实现

功能实现均在一个头文件中。

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

//C++
static std::string getTimeString()
{
    time_t t = time(nullptr);
    char cTime[32];
    strftime(cTime, sizeof(cTime), "%Y-%m-%d %H:%M:%S:%Z", localtime(&t));

    std::string sTime = cTime;
    return sTime;
}

//C环境 不使用string减少依赖
static char *getTimeChar()
{
    time_t t = time(nullptr);
    static char cTime[32];
    strftime(cTime, sizeof(cTime), "%Y-%m-%d %H:%M:%S", localtime(&t));
    return cTime;
}

//提升兼容性 默认getTimeChar
#define INFO(format, ...)   fprintf(stdout, "%s [INFO] [%s:%d %s()] " format "\n", getTimeChar(), __FILE__, __LINE__, __func__ , ##__VA_ARGS__)
#define ERROR(format, ...)  fprintf(stderr, "%s [ERROR] [%s:%d %s()] " format "\n", getTimeChar(), __FILE__, __LINE__, __func__ , ##__VA_ARGS__)

实际调用

简化了代码,调用如下。

#include "customlog.h"

int main()
{
    int ret = 5;
    char info[] = "test";
    char error[] = "an error";

    INFO("nihao123");
    INFO("result=%d info=%s", ret, info);
    ERROR("error=%s", error);
    return 0}

内容更新

更新:新增一种打印输出方式,使用方法同上。

enum LogLevel
{
    Debug = 0,
    Info,
    Warn,
    Error,
    Fatal,
    LevelCount
};
static const char *logLevel[LogLevel::LevelCount] = {"Debug", "Info", "Warn", "Error", "Fatal"};

static void serialize(int level, const char *file, int line, const char *func, const char *format, ...)
{
    time_t t = time(nullptr);
    char cTime[32] = {0};
    strftime(cTime, sizeof(cTime), "%Y-%m-%d %H:%M:%S", localtime(&t));

    //前置信息
    char front[256] = {0};
    snprintf(front, sizeof(front), "%s [%s] [%s:%d %s()] =>", cTime, logLevel[level], file, line, func);

    //具体信息
    va_list arglist;
    va_start(arglist, format);
    char buf[512] = {0};
    vsnprintf(buf, sizeof(buf), format, arglist);
    printf("%s %s\n", front, buf);   
    va_end(arglist);
}

#define LogInfo(format, ...)  serialize(LogLevel::Info, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__)
#define LogError(format, ...) serialize(LogLevel::Error, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你是周小哥啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值