C/C++ 工程自定义打印log信息级别及对应的颜色

共定义了四个级别的log,级别从小到大分别为:debug,info,warning,error
定义了全局log日志打印的级别 FRIZY_LOG_LEVEL,低于定义级别的信息将不会被打印。

#define LOG_DEBUG       0
#define LOG_INFO        1
#define LOG_WARNING     2
#define LOG_ERROR       3

#ifndef FRIZY_LOG_LEVEL
    #define FRIZY_LOG_LEVEL 2
#endif

源码如下:

#ifndef FRIZY_LOG_PRINT_H
#define FRIZY_LOG_PRINT_H

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

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

#ifdef _WIN32
#define TrimFilePath(x) strrchr(x, '\\') ? strrchr(x, '\\') + 1 : x
#else  // Linux/Unix
#define TrimFilePath(x) strrchr(x, '/') ? strrchr(x, '/') + 1 : x
#endif

//#define LogTime

#define LogColorNone_			"\033[0m"
#define LogColorRed_				"\033[0;31m"
#define LogColorLightRed_		"\033[1;31m"
#define LogColorYellow_			"\033[0;33m"
#define LogColorLightYellow_		"\033[1;33m"
#define LogColorGreen_			"\033[0;32m"
#define LogColorLightGreen_		"\033[1;32m"

#define ColorfulPrint_(color, fmt, ...) \
	do { \
        printf(color fmt LogColorNone_, ##__VA_ARGS__); \
	} while(0)

#ifndef LogTime
#define PrintLog_(color, fmt, ...) \
	do { \
        ColorfulPrint_(color, \
			"[FRIZYLog| %s(%d)]: " fmt "\n", TrimFilePath(__FILE__), __LINE__, ##__VA_ARGS__); \
	} while(0)
#else
#define PrintLog_(color, fmt, ...) \
	do { \
		time_t t; time(&t); \
		struct tm *pTm = localtime(&t); \
        ColorfulPrint_(color, \
			"[%02d:%02d:%02d| FRIZYLog: %s(%d)]: " fmt "\n", \
			pTm->tm_hour, pTm->tm_min, pTm->tm_sec, __FILE__, __LINE__, ##__VA_ARGS__); \
	} while(0)
#endif

#ifndef FRIZY_LOG_LEVEL
    #define FRIZY_LOG_LEVEL 2
#endif

#define LOG_DEBUG       0
#define LOG_INFO        1
#define LOG_WARNING     2
#define LOG_ERROR       3


#define PrintDbg_(fmt, ...) PrintLog_(LogColorNone_, fmt, ##__VA_ARGS__)
#define PrintInfo_(fmt, ...) PrintLog_(LogColorLightGreen_, fmt, ##__VA_ARGS__)
#define PrintWarn_(fmt, ...) PrintLog_(LogColorLightYellow_, fmt, ##__VA_ARGS__)
#define PrintErr_(fmt, ...) PrintLog_(LogColorLightRed_, fmt, ##__VA_ARGS__)



#define FRIZY_LOG(level, fmt, ...) do {                      \
    if (level == LOG_DEBUG) { if(LOG_DEBUG >= FRIZY_LOG_LEVEL) {PrintDbg_(fmt, ##__VA_ARGS__);}            \
    } else if (level == LOG_INFO) { if(LOG_INFO >= FRIZY_LOG_LEVEL) {PrintInfo_(fmt, ##__VA_ARGS__);}            \
    } else if (level == LOG_WARNING) { if(LOG_WARNING >= FRIZY_LOG_LEVEL) {PrintWarn_(fmt, ##__VA_ARGS__);}            \
    } else if (level == LOG_ERROR) { if(LOG_ERROR >= FRIZY_LOG_LEVEL) {PrintErr_(fmt, ##__VA_ARGS__);}            \
    } else {                                                     \
    }                                                            \
} while (0)


#ifdef NDEBUG
#define Assert(EXPRESSION) ((void)0)
#else
#define Assert(EXPRESSION) do { \
    if (EXPRESSION) { \
        ((void)0); \
    } else { \
        (_assert(#EXPRESSION, TrimFilePath(__FILE__), __LINE__)); \
    } \
} while (0)
#endif


#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif

注意:颜色打印只在linux系统中有效!!!!!

使用示例:

FRIZY_LOG(LOG_ERROR, "This is a error log demo.");
throw std::exception();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值