c++日志输出库 spdlog 简介(3)多线程控制台输出日志
2018-02-24 17:11
1906 查看
spdlog源码分析:https://www.cnblogs.com/eskylin/p/6483199.html
spdlog的异步模式使得spdLog可以支持多线程,于是写了一个多线程的小例子:
1、新建一个MFC工程。拖入两个按钮。
2、添加线程函数
在MFCApplication1Dlg.h中添加线程函数(Thread 1 和 Thread 2)的声明:
3、解析:
点击两个按钮时,会触发输出log的子线程,同时在控制台窗口中输出log信息。
需要注意的是,两个按钮中创建的logger均为控制台logger,但是名称不能相同,否则会发生重定义的错误。
如上述代码所示:多线程在控制台输出日志时没有问题,如果多个线程同时向同一个txt文件中写入log呢?
spdlog的异步模式使得spdLog可以支持多线程,于是写了一个多线程的小例子:
1、新建一个MFC工程。拖入两个按钮。
2、添加线程函数
在MFCApplication1Dlg.h中添加线程函数(Thread 1 和 Thread 2)的声明:
public: afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedButton1(); afx_msg void OnBnClickedButton2(); static UINT Thread1(LPVOID pParam); static UINT Thread2(LPVOID pParam);在CPP文件中添加函数代码:
void CMFCApplication1Dlg::OnBnClickedButton1() { AfxBeginThread(Thread1, this); } void CMFCApplication1Dlg::OnBnClickedButton2() { AfxBeginThread(Thread2, this); } UINT CMFCApplication1Dlg::Thread1(LPVOID pParam) { auto console = spd::stdout_color_mt("console1"); try{ for (int i = 0; i < 10; i++){ Sleep(500); console->info("Thread 1,Count {}",i); } } catch (const spd::spdlog_ex& ex) { std::cout << "Thread 1 Logger failed: " << ex.what() << std::endl; } spdlog::drop("console1"); return 0; } UINT CMFCApplication1Dlg::Thread2(LPVOID pParam) { auto console = spd::stdout_color_mt("console2"); try{ for (int i = 0; i < 10; i++){ Sleep(500); console->info("Thread 2,Count {}", i); } } catch (const spd::spdlog_ex& ex) { std::cout << "Thread 2 Logger failed: " << ex.what() << std::endl; } spdlog::drop("console2"); return 0; }在OnInitDialog()函数中添加开启控制台的代码:
// TODO: Add extra initialization here AllocConsole(); freopen("CONOUT$", "w+t", stdout);依次点击结果如下:
3、解析:
点击两个按钮时,会触发输出log的子线程,同时在控制台窗口中输出log信息。
需要注意的是,两个按钮中创建的logger均为控制台logger,但是名称不能相同,否则会发生重定义的错误。
auto console = spd::stdout_color_mt("console1"); auto console = spd::stdout_color_mt("console2");mt和st,同步和异步模式的区别??
如上述代码所示:多线程在控制台输出日志时没有问题,如果多个线程同时向同一个txt文件中写入log呢?
相关文章推荐
- c++ 日志输出库 spdlog 简介(2)
- c++ 日志输出库 spdlog 简介(1)
- C++ 输出彩色的控制台
- C/C++控制台输出时设置字体及背景颜色
- 将OpenERP日志输出到控制台
- slf4j+logback将日志输出到控制台
- TOMCAT控制台日志输出到指定文件中
- 使用slf4j和logback输出日志到控制台
- C++ VS C#(1):注释,变量,控制台输出
- C++ win32控制台下输出宽字符串(包括汉字)
- linux 程序运行到后台,控制台输出到文件,并能日志切割的方法
- SpringBoot 如何关闭httpclient在控制台输出DEBUG日志
- logback 参考官方文档 实现控制台与文件输出日志的 最基本配置
- c++ 在win32程序中打开控制台 并重定向输出
- 日志打印longging模块(控制台和文件同时输出)
- jboss控制台日志输出带日期问题解决方案
- TOMCAT控制台日志(startup.bat)输出到指定文件中
- 在WPF中,使用控制台输出日志信息
- springboot 配置logback控制台彩色打印,按等级输出日志文件
- Log4j2入门(1)-控制台日志输出