编写VC++日志类(Logger) ---- 方便调试

本文档介绍了如何编写一个VC++的日志类,用于简化大型程序的调试过程。日志类可以将信息打印到控制台,对于控制台或窗口程序都适用。文中详细阐述了日志类的设计思路,包括设置控制台属性的方法,并对比了旧版和新版日志类的改进,如改为Header-Only和优化结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在写较大型的程序时,往往不好调试,因为打印的日志信息太多,太繁杂,没办法一眼看到比较重要的信息,因此先写一个比较简单的日志类方便进行调试,以后再进行更新。

实现

思路

目前日志类将日志打印到控制台上,如果程序本身就是控制台程序,那么就打印到该控制台上,如果项目是窗口程序,则日志类将创建一个控制台窗口来打印日志。

设置控制台属性
介绍

主要使用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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值