【代码技巧】一段代码实现分级日志输出

#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消息就不会输出。

但是也可以是变量,那么用户就能在启动时决定输出哪些级别的信息。

总之我觉得这段代码是很精巧的值得推荐。

posted @ 2014-07-17 14:58  李可以  阅读(572)  评论(0编辑  收藏  举报