zoukankan      html  css  js  c++  java
  • 定制自己的打印函数---进阶篇

    继续上次的整理,今天是进阶版本,首先整理一下升级后的需求:

    • 满足初级篇中的所有需求;
    • 针对打印信息的重要程度分为不同的级别;
    • 根据不同的级别进行配色,方便进行鉴别;
    • 根据不同的级别控制打印信息的输出;

    需求有了,下面让我们来制定相应的规则,首先来看2.3两项,级别和配色问题,这个问题会因人而异,所以我只给出我个人的思考结果。我定义的级别分成四个等级,并分别对应不同的颜色,如下所示:

    • 级别一:调试信息(绿色),比如打印一些变量值或者跟踪程序的执行流程等;
    • 级别二:警告信息(黄色),比如参数非法或者调用某些不太重要的函数失败等;
    • 级别三:一般错误(红色),针对比较重要的错误,但还不至于终止程序,比如调用一些系统接口失败等;
    • 级别四:重大错误(紫色),针对非常严重的错误,需要终止程序的运行,比如内存申请失败等;

    大体规则就是这样,颜色主要是针对Linux终端的默认配色规则,至于函数命名,我的命名规则分别是:

    • #define mydebug(format, ...)
    • #define myalert(format, ...)
    • #define myerror(format, ...)
    • #define myfatal(format, ...)

    下面来看实现:

    #ifndef __MY_DEBUG_H__                                                                                                                                                                                      
    #define __MY_DEBUG_H__
    
    #include <stdio.h>
    
    
    #define MY_PRINT_LEVEL_NULL  (0)
    #define MY_PRINT_LEVEL_DEBUG (1)
    #define MY_PRINT_LEVEL_ALERT (2)
    #define MY_PRINT_LEVEL_ERROR (3)
    #define MY_PRINT_LEVEL_FATAL (4)
    
    #define MY_PRINT_COLOR_DEBUG (2) //green
    #define MY_PRINT_COLOR_ALERT (3) //yellow
    #define MY_PRINT_COLOR_ERROR (1) //red
    #define MY_PRINT_COLOR_FATAL (5) //purple
    
    
    #define MY_PRINT_LEVEL  MY_PRINT_LEVEL_DEBUG //use for change print level
    

    #if (MY_PRINT_LEVEL == MY_PRINT_LEVEL_DEBUG) #define mydebug(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_DEBUG, __FILE__, __LINE__, ##__VA_ARGS__) #define myalert(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_ALERT, __FILE__, __LINE__, ##__VA_ARGS__) #define myerror(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_ERROR, __FILE__, __LINE__, ##__VA_ARGS__) #define myfatal(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_FATAL, __FILE__, __LINE__, ##__VA_ARGS__) #elif (MY_PRINT_LEVEL == MY_PRINT_LEVEL_ALERT) #define mydebug(format, ...) #define myalert(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_ALERT, __FILE__, __LINE__, ##__VA_ARGS__) #define myerror(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_ERROR, __FILE__, __LINE__, ##__VA_ARGS__) #define myfatal(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_FATAL, __FILE__, __LINE__, ##__VA_ARGS__) #elif (MY_PRINT_LEVEL == MY_PRINT_LEVEL_ERROR) #define mydebug(format, ...) #define myalert(format, ...) #define myerror(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_ERROR, __FILE__, __LINE__, ##__VA_ARGS__) #define myfatal(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_FATAL, __FILE__, __LINE__, ##__VA_ARGS__) #elif (MY_PRINT_LEVEL == MY_PRINT_LEVEL_FATAL) #define mydebug(format, ...) #define myalert(format, ...) #define myerror(format, ...) #define myfatal(format, ...) printf("33[3%dm[%s:%d]"format"33[0m", MY_PRINT_COLOR_FATAL, __FILE__, __LINE__, ##__VA_ARGS__) #else #define mydebug(format, ...) #define myalert(format, ...) #define myerror(format, ...) #define myfatal(format, ...) #endif #endif // __MY_DEBUG_H__

     

    OK,大功告成,有人也许会说,为什么用宏定义不用函数实现,那样可以节省一些代码,但我个人认为这样效率更高,而且代码也没多多少。好了,目前所实现的功能只是针对小工程而言的,如果工程稍微大一些,也许就会提出更高的要求了,比如我想可以按照模块进行打印输出,并且每个模块是可以单独可控的等等,鉴于个人时间问题,后期有时间会继续整理,咱们后会有期......

    作者:潘洪银 

    地址:http://www.cnblogs.com/panhongyin

  • 相关阅读:
    android adb
    5 个免费的受欢迎的 SQLite 管理工具
    [Android]通过setImageURI设置网络上面的图片
    Android TextView实现长按复制文本功能的方法
    View工作原理(四)view的layout过程
    Anaroid WebView详解大全
    Android 如何在Eclipse中查看Android API源码以及support包源码
    关于Android的.so文件你所需要知道的
    AS问题解决系列3—iCCP: Not recognizing known sRGB profile(转)
    安卓App设计博文
  • 原文地址:https://www.cnblogs.com/panhongyin/p/5623507.html
Copyright © 2011-2022 走看看