平时调试时一般会使用printf进行数据输出调试,
但是最终上线时又需要将某些log拿掉,很麻烦,测试下使用log分级输出,测试时log等级开低便于调试,上线时log等级开高只输出error信息,可以很方便的管理log信息;
#include <stdio.h>
enum loglevels {
LOG_OFF = 0,
LOG_ERROR,
LOG_WARNING,
LOG_INFO,
LOG_DEBUG
};
static int loglevel = LOG_WARNING;
#define log_pr(level, fmt, ...) \
do { \
if (LOG_##level <= loglevel) { \
printf("[" #level "] "fmt, ##__VA_ARGS__); \
} \
} while(0)
#define log1(fmt,...) printf(fmt, ##__VA_ARGS__)
int main(void) {
log_pr(ERROR,"this is error log!\n");
log_pr(WARNING,"this is warning log!\n");
log_pr(INFO,"this is info log!\n");
log_pr(DEBUG,"this is debug log!\n");
return 0;
}
输出:
> [ERROR] this is error log!
> [WARNING] this is warning log!
只输出了小于loglevel指定等级之下的了log信息;