开启ANSI彩色输出

向来写的调试信息都是随意输出,无论是查看起来还是写起代码来都不方便,于是写了一个debug信息输出库,便于输出debug信息。
debug信息分为close,info,warning,error,critical五级,分别以不同的颜色输出,使用DEBUG1,DEBUG2,DEBUG3,DEBUG4宏来调用,全局变量g_debug定义为0时,关闭debug信息输出,高等级会使低于这个等级的debug信息输出,高于的则不输出,如g_debug=3,DEBUG1,DEBUG2,DEBUG3的都会输出,DEBUG4则不输出,这样用起来方便多了。
代码如下:

/* ***************************
 * print.h                   *
 * define debug information  *
 * author: [email protected]    *
 * **************************/
#ifndef	__PRINT_H__
#define __PRINT_H__
#include 
  
#include 
  
#include 
  
#include 
  

#define	FD	stdout
#define COLOR_CODE(CODES)	"\033[" CODES "m"
#define BLACK		COLOR_CODE("30")
#define RED		COLOR_CODE("31")
#define GREEN		COLOR_CODE("32")
#define YELLOW		COLOR_CODE("33")
#define BLUE		COLOR_CODE("34")
#define PURPLE		COLOR_CODE("35")
#define CYAN		COLOR_CODE("36")
#define WHITE		COLOR_CODE("37")

#define MODE_CODE(CODES)	"\033[" CODES "m"
#define BRIGHT		MODE_CODE("1")
#define UNDERLINE	MODE_CODE("4")
#define FLASH		MODE_CODE("5")
#define INVERSE		MODE_CODE("7")
#define NONE		MODE_CODE("0")

#define PRINT_ANSI_START(MODE,COLOR)	fputs(MODE,FD);	\
    					fputs(COLOR,FD)
#define PRINT_ANSI_STOP			fputs(NONE,FD);	\
					fputs("\n",FD)
typedef enum debug_Level
{
    DEBUG_NONE = -1,
    DEBUG_INFO,
    DEBUG_WARNING,
    DEBUG_ERROR,
    DEBUG_CRITICAL
}debug_Level;

typedef struct debug_St
{
    debug_Level level;
    char* msg_head;
    char* mode;
    char* color;
}debug_St;

void inline DebugPrint(debug_Level level, const char* file, const int line, const char* fmt, ...);

#define DEBUG(level, file, line, fmt, ...)	DebugPrint(level, file, line, fmt, ##__VA_ARGS__)
#define DEBUG1(fmt, ...)	if(g_debug-1 > DEBUG_NONE) \
    DEBUG(DEBUG_INFO, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define DEBUG2(fmt, ...)	if(g_debug-1 > DEBUG_INFO) \
    DEBUG(DEBUG_WARNING, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define DEBUG3(fmt, ...)	if(g_debug-1 > DEBUG_WARNING) \
    DEBUG(DEBUG_ERROR, __FILE__, __LINE__, fmt, ##__VA_ARGS__)
#define DEBUG4(fmt, ...)	if(g_debug-1 > DEBUG_ERROR) \
    DEBUG(DEBUG_CRITICAL, __FILE__,  __LINE__, fmt, ##__VA_ARGS__)
#endif //__PRINT_H__
/* ****************************
 * print.c                    *
 * debug information function *
 * author: [email protected]     *
 * ***************************/
#include "print.h"
static debug_St debug_st[] =
{
	{DEBUG_INFO, "[INFO]", NONE, NONE},
	{DEBUG_WARNING, "[WARNING]", BRIGHT, YELLOW},
	{DEBUG_ERROR, "[ERROR]", BRIGHT, RED},
	{DEBUG_CRITICAL,"[CRITITAL]", UNDERLINE BRIGHT, RED},
};

void inline DebugPrint(debug_Level level, const char* file, const int line, const char* fmt, ...)
{
	va_list args;
	PRINT_ANSI_START(debug_st[level].mode, debug_st[level].color);
	fprintf(FD,"%s[%s %d]",debug_st[level].msg_head, file,line);
	va_start(args, fmt);
	vfprintf(FD, fmt, args);
	va_end(args);
	PRINT_ANSI_STOP;
	fflush(FD);
}
/* **********************************
 * logtest.c			    *
 * testing debug information        *
 * using parameter '-d' '-dd' etc.  *
 * author: [email protected]           *
 ***********************************/
#include 
  
#include "print.h"

void usage();
int g_debug = 0;

int main(int argc, char **argv)
{
    int i = 1;
    char *server = NULL;
    for (i = 0; i

 

你可能感兴趣的:(职场,ansi,开启,休闲,彩色输出)