前言
在写较大型的程序时,往往不好调试,因为打印的日志信息太多,太繁杂,没办法一眼看到比较重要的信息,因此先写一个比较简单的日志类方便进行调试,以后再进行更新。
实现
思路
目前日志类将日志打印到控制台上,如果程序本身就是控制台程序,那么就打印到该控制台上,如果项目是窗口程序,则日志类将创建一个控制台窗口来打印日志。
设置控制台属性
介绍
主要使用SetConsoleTextAttribute
函数来控制cmd窗口里文本的显示,原型如下:
BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
其中属性设置靠wAttributes低字节的低四位来控制前景色,高四位来控制背景色。
使用示例
SetConsoleTextAttribute(handle_out_,
FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED |
FOREGROUND_INTENSITY |
BACKGROUND_RED);
宏定义如下:
#define FOREGROUND_BLUE 0x0001 // text color contains blue.
#define FOREGROUND_GREEN 0x0002 // text color contains green.
#define FOREGROUND_RED 0x0004 // text color contains red.
#define FOREGROUND_INTENSITY 0x0008 // text color is intensified.
#define BACKGROUND_BLUE 0x0010 // background color contains blue.
#define BACKGROUND_GREEN 0x0020 // background color contains green.
#define BACKGROUND_RED 0x0040 // background color contains red.
#define BACKGROUND_INTENSITY 0x0080 // background color is intensified.
则可表示为:
前景蓝色 | 前景绿色 | 前景红色 | 前景高亮 | 背景蓝色 | 背景绿色 | 背景红色 | 背景高亮 |
---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 |
即可得出是设置了前景色为白色,因为红绿蓝都是1,所以合成了白色,并且指定了前景色高亮。背景色为红色,不高亮。
效果如下:
旧版
日志类的打印方法
static void DefaultMsg(std::string msg);
static void DefaultMsg(const char* format, ...);
static void Notice(std::string msg);
static void Notice(const char* format, ...);
static void Info(std::string msg);
static void Info(const char* format, ...);
static void Warning(std::string msg);
static void Warning(const char* format, ...);
static void Error(std::string msg);
static void Error(const char* format, ...);
日志类的使用示例
#include <iostream>
#include "Logger.h"
int main()
{
Logger::Init(Logger::kLevelError | Logger::kLevelInfo | Logger::kLevelWarning); //
Logger::Info("Info:信息");
Logger::Notice(