spdlog源码分析:https://www.cnblogs.com/eskylin/p/6483199.html

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 = ; i < ; i++){
Sleep();
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 ;
}
UINT CMFCApplication1Dlg::Thread2(LPVOID pParam)
{
auto console = spd::stdout_color_mt("console2");
try{
for (int i = ; i < ; i++){
Sleep();
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 ;
}

在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 简介(3)多线程控制台输出日志的更多相关文章

  1. c++ 日志输出库 spdlog 简介(1)

    参考文章: log库spdlog简介及使用 - 网络资源是无限的 - CSDN博客 http://blog.csdn.net/fengbingchun/article/details/78347105 ...

  2. c++ 日志输出库 spdlog 简介(2)

    继续上一篇,example.cpp解析. 1.set_pattern 自定义日志格式 官方参考:https://github.com/gabime/spdlog/wiki/3.-Custom-form ...

  3. c++ 日志输出库 spdlog 简介(4)- 多线程txt输出日志

    在上一节的代码中加入了向文本文件中写入日志的代码: UINT CMFCApplication1Dlg::Thread1(LPVOID pParam) { try{ size_t q_size = ; ...

  4. 日志输出最不重要的就是控制台输出,控制台输出就是system.out而已

    1.日志输出最不重要的就是控制台输出,控制台输出就是system.out而已 2.所以日志输出时候会存在一个Bug就是:stdout要配置在日志输出的最前面,因为stdout控制台输出,最不重要,如果 ...

  5. C#在控制台输出异常所在的行数

    对于异常,我们经常用try-catch语句来处理,一种常见的方式是在catch语句块用MessageBox.Show("异常")这种弹窗的方式来报告异常.但是有些时候,有些异常发生 ...

  6. 细说Java主流日志工具库

    概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息. 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子. 我们先来逐一了解一下主流日志工具. java.util ...

  7. 基于java.util.logging实现轻量级日志记录库(增加根据当前类class初始化,修复线程池模型(javaEE)下的堆栈轨迹顺序与当前调用方法不一致问题)

    前言: 本章介绍自己写的基于java.util.logging的轻量级日志记录库(baseLog). 该版本的日志记录库犹如其名,baseLog,是个实现日志记录基本功能的小库,适合小型项目使用,方便 ...

  8. zlog 纯C日志函数库的简单使用方法

    zlog简述: log是一个高性能.线程安全.灵活.概念清晰的纯C日志函数库. 事实上,在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx).C程序员都喜 ...

  9. Java主流日志工具库

    在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息.在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子.我们先来逐一了解一下主流日志工具. 1.java.util.lo ...

随机推荐

  1. Excel Sheet Column Title (STRING - TYPE CONVERTION)

    QUESTION Given a positive integer, return its corresponding column title as appear in an Excel sheet ...

  2. Metropolis(多源点最短路)

    Metropolis https://www.nowcoder.com/acm/contest/203/I 题目描述 魔方国有n座城市,编号为.城市之间通过n-1条无向道路连接,形成一个树形结构. 在 ...

  3. 将tomcat做成服务

    ①修改startup.bat 在第一行前加入如下内容: SETJAVA_HOME=D:\ProgramFiles\tool\Java\jdk1.6 SETCATALINA_HOME=D:\Progra ...

  4. ViewPager欢迎界面

    一.几张图片组成欢迎界面 下方有几个点对应每个图片 当图片被选中时对应的点会变亮,当对应的点被点击时也会切换到指定画面 以下是代码 package com.example.viewpager_1; i ...

  5. TokuMX唯一索引不支持dropDups选项

    TokuMX v1.5.0的唯一索引(unique index)不支持dropDups选项, 如果源数据包含相同目标key的文档,将无法建立唯一索引. 问题场景: 从MongoDB到TokuMX的数据 ...

  6. 表单提交的两种请求方式:post与get。post与get两者的对比分析

    post与get两者的对比分析:

  7. 在探http请求

    参考:https://itbilu.com/other/relate/Ny2IWC3N-.html Cookie和Session都是为了解决HTTP协议的无状态问题,存储HTTP通讯中客户端与服务器之 ...

  8. db2 快照 SNAPSHOT

    打开和关闭快照缺省情况不打开 DB2 监控,必须在连接或实例级别上进行设置.有一系列监视器开关来决定是否监控某种数据元素.还预留了一个内存堆,用于包含为监控而存储的信息.1:在instance级别上设 ...

  9. Window 编码 UTF-8 BOM 说明

    UTF-8 不需要 BOM,尽管 Unicode 标准允许在 UTF-8 中使用 BOM.所以不含 BOM 的 UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软的习惯(顺便提一 ...

  10. codevs1246 丑数

    题目描述 Description 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2 ...