zoukankan      html  css  js  c++  java
  • 【代码技巧】一段代码实现分级日志输出

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

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

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

  • 相关阅读:
    HyperV创建NAT网络
    Win10
    ConEmu
    ffmpeg的centos、msys2、msvc编译
    7z压缩gopath的src的批处理
    VS2015自带v120的Platform Toolset
    Putty配置
    第一章:HTML5的基础
    java的错题整理
    第十四章:类的带参方法
  • 原文地址:https://www.cnblogs.com/likeyiyy/p/3851081.html
Copyright © 2011-2022 走看看