参考实现一个在 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
效果如下: