C语言中定义附带时间(毫秒)的打印Log的宏

本文介绍了如何在C程序中通过宏定义和`printf`结合,实现带有时间戳的日志打印功能。代码示例中包含了获取当前时间的函数以及一系列宏定义,用于打印不同类型的变量值,如字符串、整数、指针等。通过加锁确保了多线程环境下时间获取的安全性。

1. 需求

* 有时候程序调试的时候,需要打印出附带时间点的log 信息,本例中给出一种实现

2. 实现: 宏 +  printf

* 2.1 声明部分

extern char* getCurrentTime();

#define PRINTVV(format, ...) \
        printf("%s Func=[%s], Line=[%d] " format"\n", getCurrentTime(), __FUNCTION__, __LINE__, ## __VA_ARGS__)

//For print log
#define PRINT() PRINTVV();
#define PRINTV(v) PRINTVV("value=[%s]", (v))
#define PRINTVN(v) PRINTVV(""#v"=[%s]", (v))
#define PRINTI(v) PRINTVV(""#v"=[%d]", (int)(v))
#define PRINTU(v) PRINTVV(""#v"=[%lu]", (v))
#define PRINTP(v) PRINTVV(""#v"=[%p]", (v))

2.2 实现部分-获取时间时,增加了‘锁’

#include <pthread.h>

#define PRINT_LEN 1024

pthread_mutex_t mutex;
static int mutex_inited = 0;
static char time_buf[PRINT_LEN] = {0};
char* getCurrentTime()
{
    if (mutex_inited == 0) {
        mutex_inited = 1;
        pthread_mutex_init(&mutex, NULL);
    }

    pthread_mutex_lock(&mutex);

    time_t t;
    struct tm * lt;
    struct  timeb   stTimeb;
    ftime(&stTimeb);
    time (&t);
    lt = localtime (&stTimeb.time);
    sprintf(time_buf, "%d-%d-%d %d:%02d:%02d.%u", lt->tm_year+1900, lt->tm_mon + 1, lt->tm_mday, 
                lt->tm_hour, lt->tm_min, lt->tm_sec, stTimeb.millitm);
    
    pthread_mutex_unlock(&mutex);
    return time_buf;
}
 

3. 使用

* 使用下面的宏打印:空行、int、string等。

#define PRINT() PRINTVV();
#define PRINTV(v) PRINTVV("value=[%s]", (v))
#define PRINTVN(v) PRINTVV(""#v"=[%s]", (v))
#define PRINTI(v) PRINTVV(""#v"=[%d]", (int)(v))
#define PRINTU(v) PRINTVV(""#v"=[%lu]", (v))
#define PRINTP(v) PRINTVV(""#v"=[%p]", (v))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值