接口定义log.h
该文件中定义了打印日志的接口。
#ifndef _LOG_H_
#define _LOG_H_
#define INFO_OUTPUT 3
#define WARNING_OUTPUT 2
#define DEBUG_OUTPUT 1
#define ERROR_OUTPUT 0
#define LOG_INFO(args,...)\
do{\
if (DEBUG_LEVEL >= INFO_OUTPUT)\
{\
printf("[I] "args" (%s, %d)\n", ##__VA_ARGS__, __FILE__, __LINE__);\
}\
}while(0)
#define LOG_WARNING(args,...)\
do{\
if (DEBUG_LEVEL >= WARNING_OUTPUT)\
{\
printf("[W] "args" (%s, %d)\n", ##__VA_ARGS__, __FILE__, __LINE__);\
}\
}while(0)
#define LOG_DEBUG(args,...)\
do{\
if (DEBUG_LEVEL >= DEBUG_OUTPUT)\
{\
printf("[D] "args" (%s, %d)\n", ##__VA_ARGS__, __FILE__, __LINE__);\
}\
}while(0)
#define LOG_ERROR(args,...)\
do{\
if (DEBUG_LEVEL >= ERROR_OUTPUT)\
{\
printf("[E] "args" (%s, %d)\n", ##__VA_ARGS__, __FILE__, __LINE__);\
}\
}while(0)
#endif
使用实例a.c
#include <stdio.h>
#include "log.h"
/*通过这个宏来控制打印日志的级别,这个宏也可以在编译的时候当作编译选项添加进去。*/
#define DEBUG_LEVEL INFO_OUTPUT
int main()
{
LOG_INFO("I'm Info");
LOG_WARNING("I'm Warning");
LOG_DEBUG("I'm Debug");
LOG_ERROR("I'm Error");
return 0;
}
编译a.c
gcc -c a.c
执行编译的结果a.out
有些终端有关键字高亮的话,看起来很是舒服,这里看不到结果,我贴图大家参考下,顺便说下,我用的是MobaXterm,感觉用起来还不错。
[I] I'm Info (a.c, 6)
[W] I'm Warning (a.c, 7)
[D] I'm Debug (a.c, 8)
[E] I'm Error (a.c, 9)
我的这个Debug不能高亮 不知道怎么设置, 如果你知道了麻烦告诉我下~
通过编译选项将宏加到代码中去,请看下面的编译命令
gcc a.c -D DEBUG_LEVEL=INFO_OUTPUT
这里的INFO_OUTPUT也可以写成具体的数字,不过这样更明了一些。