话不多说,直接上代码:
#ifndef _LOG_H
#define _LOG_H
#include <stdio.h>
/*打印信息的显示颜色*/
#define HL_RED "\033[1;31m" //高亮红色
#define HL_YEL "\033[1;33m" //高亮黄色
#define HL_GREEN "\033[1;32m" //高亮绿色
#define NONE_COLOR "\033[0m" //清除颜色
/**
* @enum
* log的级别。
*/
enum {
LOG_LEVEL_D = 0, //debug
LOG_LEVEL_I, //info
LOG_LEVEL_W, //warning
LOG_LEVEL_E, //error
LOG_LEVEL_OFF, //off
} ;
static const int log_level = LOG_LEVEL_D;
#define my_log_error(fmt, args ...) \
do \
{ \
if(log_level <= LOG_LEVEL_E) \
fprintf(stderr,HL_RED " error (%s|%d): " **NONE_COLOR** \
fmt, __func__, __LINE__, ## args); \
} \
while(0)
#define my_log_warn(fmt, args ...) \
do \
{ \
if(log_level <= LOG_LEVEL_W) \
fprintf(stderr,HL_YEL "warning (%s|%d): " **NONE_COLOR** \
fmt, __func__, __LINE__, ## args); \
} \
while(0)
#define my_log_info(fmt, args ...) \
do \
{ \
if(log_level <= LOG_LEVEL_I) \
fprintf(stderr,HL_GREEN " (%s|%d): " **NONE_COLOR**\
fmt, __func__, __LINE__, ## args); \
} \
while(0)
#define my_log_debug(fmt, args ...) \
do \
{ \
if(log_level <= LOG_LEVEL_D) \
fprintf(stderr, " (%s|%d): " \
fmt, __func__, __LINE__, ## args); \
} \
while(0)
#endif/*_LOG_H*/
备注:
1、需要打印的地方包含本头文件即可;
2、设置log的级别有利于区分调试代码后release代码,release时,可以将log级别设置为error级别或者warning级别;
3、之所有使用fprintf,是可以将打印重定向到文件保存起来,如果使用printf的话就只能输出到屏幕;
4、这个打印具有很大的扩展性,比如可以在fprintf里面加上打印系统时间等
5、打印信息的显示颜色值可以网上查一下,还有其他好多颜色可以设置;如果在windows环境下打印,有可能看不到打印的颜色,需要将串口打印工具设置一下,仿真终端设置成“Linux”
6、关于printf输出设置颜色更多的样式(闪烁、字体加粗等)请参考下面链接文章的设置方法:https://blog.csdn.net/u013177084/article/details/79553872