C++ – 控制台程序在控制台窗口可变参数格式化带颜色输出日志信息
原创文章,作者:StubbornHuang,如若转载,请注明出处:《C++ – 控制台程序在控制台窗口可变参数格式化带颜色输出日志信息》https://www.stubbornhuang.com/875/
1 C++以可变参数格式化带颜色输出日志信息
使用Unity时,它的日志系统做的就比较好,不同类型的日志信息在底下面板以不同的颜色输出出来,简单明了,所以仿照这个做了一个简陋的,不过也够用了,代码如下:
#include <iostream>
#include <Windows.h>
template <typename... Args>
void LogError(const char* fmt, Args... args) {
size_t strsize = snprintf(nullptr, 0, fmt, args...) + 1;
char* outstr = (char*)malloc(strsize);
snprintf(outstr, strsize, fmt, args...);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
std::cout << outstr << std::endl;
free(outstr);
}
template <typename... Args>
void LogWarning(const char* fmt, Args... args) {
size_t strsize = snprintf(nullptr, 0, fmt, args...) + 1;
char* outstr = (char*)malloc(strsize);
snprintf(outstr, strsize, fmt, args...);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
std::cout << outstr << std::endl;
free(outstr);
}
template <typename... Args>
void Log(const char* fmt, Args... args) {
size_t strsize = snprintf(nullptr, 0, fmt, args...) + 1;
char* outstr = (char*)malloc(strsize);
snprintf(outstr, strsize, fmt, args...);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
std::cout << outstr << std::endl;
free(outstr);
}
int main(int argn, char **argv)
{
LogError("%s", "LogError");
LogWarning("%s", "LogWarning");
Log("%s", "Log");
getchar();
return 0;
}
效果:
当前分类随机文章推荐
- C++11 - std::shared_ptr初始化的几种方式
- C++11 - 基于无锁队列的单生产者单消费者模型
- C++11/std::shared_ptr - 循环引用问题
- C++ 11 - final关键字简要介绍
- C++11/std::atomic - 原子变量(不加锁实现线程互斥)
- C++11 - 父类与子类相互包含的时候该如何正确的使用智能指针,防止循环引用
- C++ - 使用C++标准库过滤Windows文件名中的非法字符
- C++ - 获取当前进程内存使用情况
- Centos7 编译C++项目错误解决 : terminate called after throwing an instance of 'std::regex_error'
- C++读取Shp文件并将Shp转化为DXF