让控制台输出彩色日志 windows

        经常看到一些开源软件(例如NDK编译的时候,操作系统启动的时候)打印的输出很多是彩色的,这样比较容易分辨哪些是重点,增强可读性。代码如下:

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2. #include <windows.h>  
  3.   
  4. #define LOG_TYPE_NORMAL 0  
  5. #define LOG_TYPE_WARNING 1  
  6. #define LOG_TYPE_ERROR 2  
  7.   
  8. void LOG(int iLogType, char* szFmt, ...)  
  9. {  
  10.     va_list                     argPtr;  
  11.     char                        szOut[1024*2];  
  12.     DWORD                       dwWs;  
  13.     HANDLE                      hConsoleOutput;  
  14.     CONSOLE_SCREEN_BUFFER_INFO  screenBufferInfo;  
  15.     WORD                        wAttributes;  
  16.       
  17.     hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);  
  18.     GetConsoleScreenBufferInfo(hConsoleOutput, &screenBufferInfo);  
  19.   
  20.     switch( iLogType )  
  21.     {  
  22.     case LOG_TYPE_NORMAL:       // 一般信息  
  23.         wAttributes = FOREGROUND_GREEN | FOREGROUND_INTENSITY;  
  24.         break;  
  25.     case LOG_TYPE_WARNING:      // 警告信息,黄色  
  26.         wAttributes = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;  
  27.         break;  
  28.     case LOG_TYPE_ERROR:        // 错误信息,红色  
  29.         wAttributes = FOREGROUND_RED|FOREGROUND_INTENSITY;  
  30.         break;  
  31.     default:  
  32.         wAttributes = screenBufferInfo.wAttributes;  
  33.     }  
  34.       
  35.     va_start(argPtr, szFmt);  
  36.     vsprintf(szOut, szFmt, argPtr);  
  37.     va_end(argPtr);  
  38.   
  39.     SetConsoleTextAttribute(hConsoleOutput, wAttributes);  
  40.     WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), szOut, strlen(szOut), &dwWs, NULL);  
  41.     SetConsoleTextAttribute(hConsoleOutput, screenBufferInfo.wAttributes);  
  42. }  
  43.   
  44. void main()  
  45. {  
  46.     char *normal = "hello";  
  47.     int warning = 10;  
  48.     unsigned error = 0x80001000;  
  49.   
  50.     LOG(LOG_TYPE_NORMAL,"%s\n",normal);  
  51.     LOG(LOG_TYPE_WARNING,"%x\n",warning);  
  52.     LOG(LOG_TYPE_ERROR,"%u\n",error);  
  53. }  
        其中黄色的宏是根据光学三原色的红色和绿色或出来的。除了前景颜色,还可以设置背景颜色,具体跟到FORGROUND_RED的定义就可以看到其他类似的参数了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值