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 }
至此,第一篇随笔结束。希望多多有意义的指教。