【代码技巧】一段代码实现分级日志输出
#define LOG_FAULT (1 << 0) #define LOG_ERROR (1 << 1) #define LOG_WARN (1 << 2) #define LOG_INFO (1 << 3) #define LOG_DEBUG (1 << 4) #define TRACE(trace,fmt, ...) \ do { \ if ((global_trace & (trace)) == LOG_FAULT) \ printf("[FAULT] <%s> "fmt"", __FUNCTION__, ##__VA_ARGS__); \ else if ((global_trace & (trace)) == LOG_ERROR) \ printf("[ERROR] <%s> "fmt"", __FUNCTION__, ##__VA_ARGS__); \ else if ((global_trace & (trace)) == LOG_WARN) \ printf("[WARN] <%s> "fmt"", __FUNCTION__, ##__VA_ARGS__); \ else if ((global_trace & (trace)) == LOG_INFO) \ printf("[INFO] <%s> "fmt"", __FUNCTION__, ##__VA_ARGS__); \ else if ((global_trace & (trace)) == LOG_DEBUG) \ printf("[DEBUG] <%s> "fmt"", __FUNCTION__, ##__VA_ARGS__); \ } while(0)
当然严格说来,这不能算日志输出,只能算多级打印消息。
global_trace可以是宏,也可以是变量,假如是宏的话,代表在编译时指定输出级别,比如我们调试代码时设定为0x1F,就是所有消息全部输出,但是交给用户的可以设为0xF,这时debug消息就不会输出。
但是也可以是变量,那么用户就能在启动时决定输出哪些级别的信息。
总之我觉得这段代码是很精巧的值得推荐。