#include <stdlib.h>
#include <time.h>
#define NONE "\033[m"
#define RED "\033[1;31m"
#define GREEN "\033[1;32m"
#define BLUE "\033[1;34m"
#define CYAN "\033[1;36m"
#define PURPLE "\033[1;35m"
#define YELLOW "\033[1;33m"
#define _print(_level, args...) \
do \
{ \
switch (_level) \
{ \
case (DEBUG): \
printf(BLUE "[debug]" NONE); \
break; \
case (INFO): \
printf(PURPLE "[info]" NONE); \
break; \
case (WARN): \
printf(RED "[warn]" NONE); \
break; \
case (ERROR): \
printf(RED "[error]" NONE); \
break; \
}; \
printf(args); \
} while (0)
#define _merge(__format__) CYAN "%s %s<%s>:%d " NONE __format__ "\n"
#define dengrui(_level, _format, args...) \
do \
{ \
_print(_level, _merge(_format), _logTime(), __func__, __FILE__, __LINE__, ##args); \
} while (0)
enum _level
{
DEBUG = 0,
INFO,
WARN,
ERROR,
FATAL
};
static struct tm *_ptm;
static time_t _time;
static char _result[20];
static char *_logTime(void)
{
time(&_time);
_ptm = localtime(&_time);
sprintf(_result, "%02d-%02d-%02d %02d:%02d:%02d",
_ptm->tm_year + 1900, _ptm->tm_mon + 1, _ptm->tm_mday, _ptm->tm_hour, _ptm->tm_min, _ptm->tm_sec);
_result[20] = '\0';
return _result;
}
C C++带多个参数的宏(...与__VA_ARGS__详解)_c++ __va_args___小杰哥dev的博客-CSDN博客
C/C++语言中如何使用宏打印行号、文件名和函数名_c++11 宏定义 文件行号_Raptor_2017的博客-CSDN博客