简易 C 日志宏

参考实现一个在 C 程序中打印日志的宏,通过包装 printf() 实现。

klogger.h

#ifndef _SHACHI_LOGGER_H
#define _SHACHI_LOGGER_H

// \brief       : 自定义的日志宏,以供调试。
// \author      : shachi
// \email       : shachi1758@outlook.com

// 日志模块开关
#ifdef __LOG

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

#define COLOR_RED "\033[1;31m"
#define COLOR_GREEN "\033[1;34m"
#define COLOR_NONE "\033[0m"

#define KINFO(fmt, args...)\
do\
{\
    time_t t;\
    struct tm *ti;\
    time(&t);\
    ti = localtime(&t);\
    printf("%d-%d-%d %d:%d:%d ",ti->tm_year + 1900,ti->tm_mon+1,ti->tm_mday,ti->tm_hour,ti->tm_min,ti->tm_sec);\
    printf("[%s:%d->%s] ", __FILE__,__LINE__,__func__);\
    printf(COLOR_GREEN "INFO:" COLOR_NONE);\
    printf(fmt, ##args);\
}while(0)

#define KERROR(fmt, args...)\
do\
{\
    time_t t;\
    struct tm *ti;\
    time(&t);\
    ti = localtime(&t);\
    printf("%d-%d-%d %d:%d:%d ",ti->tm_year + 1900,ti->tm_mon+1,ti->tm_mday,ti->tm_hour,ti->tm_min,ti->tm_sec);\
    printf("[%s:%d->%s] ", __FILE__,__LINE__,__func__);\
    printf(COLOR_RED "ERROR:" COLOR_NONE);\
    printf(fmt, ##args);\
}while(0)

// 裸机简易 LOG
#define debug(fmt,args...) printf (fmt ,##args)
#define debugX(level,fmt,args...) if (DEBUG>=level) printf(fmt,##args);

#else

#define KINFO(fmt,args...)
#define KERROR(fmt, args...)
#define debug(fmt,args...)
#define debugX(level,fmt,args...)

#endif // __LOG

#endif // _SHACHI_LOGGER_H

使用实例:

test.c

#include "klogger.h"

int main(int argc, const char* argv[])
{
    KINFO("%s","hello,world\n");
    KERROR("有错误!\n");

    return 0;

}

编译运行:

$ gcc -o ./test -Wall -D__LOG ./test.c
$ ./test

效果如下:

参考
C语言简单的日志宏打印
C语言如何返回格式化日期时间(格式化时间)?
C使用宏定义封装printf实现日志功能

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容