跟着小德学C++之日志记录

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界本源的探索。那么就由我来带领大家拨开迷雾,深入探究我们世界的根本。

92-102这10行代码仅是做输出基础信息使用的,我们就不做赘述,我们主要看88-90这几行。

作为一个成熟的程序,必然需要日志来作为记录异常和调试的工具。而AZ端主要的日志操作就是sLog模块。

从common/Logging/Log.h中我们可以知道,如同sConfigMgr一样,sLog是Log的实例。所谓初始化日志模块,主要就是配置日志级别和输出位置。

88行初始化输出位置(终端、日志文件等),89行基于配置重新设置日志级别和输出位置。

我们再深入探究后,会发现最终记录日志,使用到了boost::asio模块。

Boost.Asio是一个跨平台的C++库,用于网络和低级I/O编程。它提供了一种现代C++方法,为开发人员提供了一致的异步模型。Boost.Asio提供了基本的C++网络、并发和其他类型I/O的构建模块。

Boost.Asio的特点包括:

  • 异步模型:使用现代C++方法实现了一致的异步模型。
  • 跨平台:支持多个平台,包括Linux、macOS、Windows和FreeBSD。
  • 应用范围广泛:Boost.Asio被用于各种应用程序,从手机应用到世界上最快的股票交易市场。

要使用Boost.Asio,您可以按照以下步骤进行:

  1. 包含头文件

: 在您的C++代码中包含Boost.Asio的头文件,以便可以使用其中定义的类和函数。例如:

#include <boost/asio.hpp>
  1. 创建io_context

: 创建一个boost::asio::io_context对象,它代表了系统的I/O上下文。这是执行异步操作所必需的。

boost::asio::io_context ioContext;
  1. 创建Socket对象

: 根据您的需求,创建一个boost::asio::ip::tcp::socket或boost::asio::ip::udp::socket对象,用于处理TCP或UDP通信。

boost::asio::ip::tcp::socket tcpSocket(ioContext);
  1. 执行异步操作

: 使用async_read、async_write等函数执行异步读取或写入操作。这些操作将在后台进行,不会阻塞您的程序。

tcpSocket.async_read_some(boost::asio::buffer(data, length), handler);
  1. 处理事件循环

: 调用ioContext.run()来启动事件循环,这将使异步操作得以执行。

ioContext.run();
  1. 处理回调

: 为异步操作的完成定义回调函数,并在操作完成时进行处理。

void handler(const boost::system::error_code& error, std::size_t bytes_transferred) { if (!error) { // 操作成功完成 } else { // 发生错误 } 
}

这些是使用Boost.Asio进行基本网络编程的一般步骤。当然,Boost.Asio还提供了更多高级功能,如定时器、解析器等,以满足更复杂的网络编程需求。您可以参考Boost.Asio的官方文档和教程,以获取更详细的信息和示例代码。

由此可以说明,AZ端日志模块采用了异步IO的方式,目的是提高非日志模块的运行效率。

好了,今天就到这里吧,我要去呵护我的世界之树了,拜拜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/326008.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用printJS使网页打印成PDF、网页html结合printJS导出为pdf

先放几个参考链接 感谢&#xff01; Vue使用PrintJS实现页面打印功能_vue print.js 设置打印pdf的大小-CSDN博客 前台导出pdf经验汇总 &#xff08;html2canvas.js和浏览器自带的打印功能-print.js&#xff09;以及后台一些导出pdf的方法_iqc后台管理系统怎么做到导出pdf-CSD…

AI绘画Midjourney绘画提示词Prompt大全

一、Midjourney绘画工具 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭…

C++之STL库简介

目录 一、STL&#xff08;Standard Template Library&#xff0c;标准模板库&#xff09; 二、容器&#xff08;Containers&#xff09; 1.vector&#xff08;动态数组&#xff09; 2.list&#xff08;双向链表&#xff09; 3.deque&#xff08;双端队列&#xff09; 4.st…

《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置(7)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第I篇 第2章 PCI总线的桥与配置&#xff08;6&#xff09; 2.2 HOST主桥 MPC8548处理器的拓扑结构如图2-2所示&#xff1a; OCeaN部件的拓扑结构如图2-3所示&#xff1a; 2.2.1 PCI设备配置空间的访问机制 为了…

大学生搜题软件,未来可期吗?

作为一家专注于软件开发的公司《智创有术》&#xff0c;我们致力于为客户提供创新、高效和可靠的解决方案。通过多年的经验和专业知识&#xff0c;我们已经在行业内建立了良好的声誉&#xff0c;并赢得了客户的信任和支持。 支持各种源码&#xff0c;网站搭建&#xff0c;APP&a…

如何撰写引人注目的博文

本文介绍了撰写博文和利用博客增加有机网站流量的艺术。本文将链接到我们博客上的一些最佳内容&#xff0c;以解决一些具体问题。 写什么 想知道如何创建博客吗&#xff1f;在撰写博文时&#xff0c;请始终牢记以下两个问题&#xff1a; 博客是为你的读者服务的&#xff0c;用…

2024年需要高度关注的六大网络安全威胁

创新技术&#xff08;如生成式人工智能、无代码应用程序、自动化和物联网&#xff09;的兴起和迅速采用&#xff0c;极大地改变了每个行业的全球网络安全和合规格局。 网络犯罪分子正在转向新的技术、工具和软件来发动攻击&#xff0c;造成更大的破坏。因此&#xff0c;《2023年…

如何在Android Glide中结合使用CenterCrop和自定义圆角变换(图片部分圆角矩形)

如何在Android Glide中结合使用CenterCrop和自定义圆角变换&#xff08;图片部分圆角矩形&#xff09; 在Android开发中&#xff0c;使用Glide加载图片时&#xff0c;我们经常需要对图片进行特定的处理&#xff0c;比如裁剪和圆角变换&#xff0c;特别是一些设计稿&#xff0c;…

基于R语言(SEM)结构方程模型教程

详情点击链接&#xff1a;基于R语言&#xff08;SEM&#xff09;结构方程模型教程 01、R/Rstudio (2)R语言基本操作&#xff0c;包括向量、矩阵、数据框及数据列表等生成和数据提取等 (3)R语言数据文件读取、整理&#xff08;清洗&#xff09;、结果存储等&#xff08;含tidve…

红队专题-Web安全/渗透测试-文件上传/下载/包含

文件上传/下载/包含 招募六边形战士队员利用目录穿越反弹SHELL实战测试2.2 提交报文修改检测3.2 文件内容检测绕过完整文件结构 检测 第四章&#xff1a;解析漏洞第一节 常见解析漏洞iis/nginx php fastcgi 取值错误 解析漏洞 &#xff08;配置错误&#xff09;nginx 文件名逻…

加密的手机号如何模糊查询?

1 一次加载到内存 实现这个功能&#xff0c;我们第一个想到的办法可能是&#xff1a;把个人隐私数据一次性加载到内存中缓存起来&#xff0c;然后在内存中先解密&#xff0c;然后在代码中实现模糊搜索的功能。 这样做的好处是&#xff1a;实现起来比较简单&#xff0c;成本非常…

vue3 鲜为人知的知识点

该篇文章是个人觉得在平常开发过程中没怎么注意到&#xff08;新增加&#xff09;的知识点&#xff0c;每个章节的内容在官网中不只文章提到的这些。 &#x1f495; 模板语法 ✔ 动态参数 <script setup> import { ref } from vueconst attributeName ref(msg) const …