1序
打印在调试程序的过程中相当重要,但是不同的错误需要打印不同的颜色,也可以用打印等级来控制
2 相关代码实现
#include <stdarg.h>
typedef enum
{
LOG_LV_ERR = 0;
LOG_LV_WARN,
LOG_LV_INFO,
LOG_LV_DBG,
LOG_LV_MAX
}LogLevel;
typedef enum
{
LOG_CLR_NONE = 0;
LOG_CLR_RED,
LOG_CLR_GREEN,
LOG_CLR_BLUE,
LOG_CLR_GRAY,
LOG_CLR_CYAN,
LOG_CLR_PURPLE,
LOG_CLR_BROWN,
LOG_CLR_YELLOW,
LOG_CLR_WHITE,
LOG_CLR_MAX
}LogColor;
#define LOG_CLRSTR_NONE "\033[m"
#define LOG_CLRSTR_RED "\033[0;32;31m"
#define LOG_CLRSTR_GREEN "\033[0;32;32m"
#define LOG_CLRSTR_BLUE "\033[0;32;34m"
#define LOG_CLRSTR_DARY_GRAY "\033[1;30m"
#define LOG_CLRSTR_CYAN "\033[0;36m"
#define LOG_CLRSTR_PURPLE "\033[0;35m"
#define LOG_CLRSTR_BROWN "\033[0;33m"
#define LOG_CLRSTR_YELLOW "\033[1;33m"
#define LOG_CLRSTR_WHITE "\033[1;37m"
#define MODULE_NAME "LOG_TEST"
#define OSA_print LogWrite
#define OSA_WARN(fmt,...) \
do \
{ \
OSA_print(LOG_LV_WARN,LOG_CLR_YELLOW,__FILE__,__LINE__,"[ "MODULE_NAME " ]" "WARN (%s|%d): " fmt,__func__,__LINE__,## __VA_ARGS__); \
}while(0)
static const char *gColor[LOG_CLR_MAX] = {
LOG_CLRSTR_NONE,
LOG_CLRSTR_RED,
LOG_CLRSTR_GREEN,
LOG_CLRSTR_BLUE,
LOG_CLRSTR_DARY_GRAY,
LOG_CLRSTR_CYAN,
LOG_CLRSTR_PURPLE,
LOG_CLRSTR_BROWN,
LOG_CLRSTR_YELLOW,
LOG_CLRSTR_WHITE
};
void LogPrintColor(unsigned int color)
{
const char *str = NULL;
if(color >= sizeof(gColor)/sizeof(char *))
{
return ;
}
str = gColor[color];
printf("%s",str);
return ;
}
int (int level,int color,char const* filename,int lineno,const char *pFmt,...)
{
va_list args;
char printBuf[512];
memset(printBuf,0,sizeof(printBuf));
LogPrintColor(color);
va_start(args,pFmt);
vprintf(pFmt,args);
va_end(args);
LogPrintColor(LOG_CLRSTR_NONE);
return 0;
}
int main()
{
struct tm *curTime;
time_t ramtime;
char logTmpData[256];
time(&ramtime);
curTime = localtime(&ramtime);
memset(logTmpData,0,sizeof(logTmpData));
snprintf(logTmpData,256,"%d/%d/%d/ %d %d:%d:%d",
curTime->tm_year+1900,
curTime->tm_mom+1,
curTime->tm_mday,
curTime->tm_hour,
curTime->tm_min,
curTime->tm_sec);
OSA_WARN("%s\n",logTmpData);
return 0;
}