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

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

跟着小德学C++之日志记录_第1张图片

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

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

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

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

跟着小德学C++之日志记录_第2张图片

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

跟着小德学C++之日志记录_第3张图片

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 
  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的方式,目的是提高非日志模块的运行效率。

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

你可能感兴趣的:(c++,开发语言)