根據需要分等級的打印日志(C語言)


 

在程序遇到問題調試時,有時候需要打印一些中間變量,觀察完調試完又需要把這些打印注釋掉,感覺很麻煩。所以寫了一個小程序,可以設置打印日志等級。

在主程序設置要打印的日志等級debug,就把相應的等級的日志全部打出來觀察。

程序用到了va_list(在C語言中解決變參問題的一組宏),相關知識可參考http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html(注意鏈接文章正確的程序在評論中) 。

直接上主程序:main.cpp

 1 #include"log.h"
 2 #include<stdio.h>
 3 int debug = 2; //10 為全打  1-9只打相應等級日志
 4 int main()
 5 {    
 6     SetDebugLevel();
 7     char s[]="abc";
 8     int k = 7;
 9     double kk = 11.5;
10     WriteLog(1 , "1-日志是:%s\n" , "abc");
11     WriteLog(2 , "2-日志是:%s , k:%d\n" , s , k);  //WriteLog(日志等級,格式化字符串 ,不定個數的變量)
12     WriteLog(3 , "3-日志是:%s , k:%d\n" , s , k);
13     WriteLog(4 , "4-日志是:%s , k:%d\n" , s , k);
14     WriteLog(5 , "5-日志是:%s , k:%d\n" , s , k);  //debug為5 , 則只打印這一條。
15     WriteLog(6 , "6-日志是:%s , k:%d , kk = %lf\n" , s , k , kk);
16     printf("\n");
17     return 0;
18 }
日志打印等級debug為2,則只打印第11行。

 日志打印等級debug為6,則只打印第15行。

日志打印等級debug為10,則全部打印。

 日志打印等級為0(非1-10) , 則不做任何打印(指調用WriteLog的打印)。

調用的程序直接貼代碼:
log.h
1 void WriteLog(int , char * ,... );
2 void SetDebugLevel();

 具體實現代碼:

  log.cpp

 1 #include<stdio.h>
 2 #include <stdarg.h>
 3 
 4 extern int debug; 
 5 int debug_flag = 0;
 6 void WriteLog(int i,va_list va_alist,...)
 7 {
 8     va_list args;    
 9     int level = i;
10     va_start(args ,va_alist);
11     if(debug_flag & 1 << (level - 1))    //注意&和<<優先級
12     {
13         vfprintf(stderr, va_alist, args);
14     }
15     va_end(args);
16 }
17 void SetDebugLevel()
18 {
19     if (debug >= 1 && debug <= 9)
20     {
21         debug_flag |= 1 << (debug-1);
22     }
23     else if(debug == 10)
24     {
25         debug_flag = 255;
26     }
27 }

至此,第一篇隨筆結束。希望多多有意義的指教。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM