异步日志方案spdlog

异步日志方案spdlog

spdlog 是一款高效的 C++ 日志库,它以其极高的性能零成本的抽象 而著称。spdlog 支持异步同步日志记录,提供多种日志级别,并允许用户将日志输出到控制台、文件或自定义的接收器。

  • 多线程使用和同步、异步日志没有关系
  • 是否在同一线程处理也和同步、异步日志没有关系
区别: spdlog::info()调用之后是否打印成功,如果调用到其他线程中打印则为异步日志。
  • 零成本抽象 :spdlog 通过模板和内联函数 来实现零成本抽象,
    确保只有在真正需要时才进行日志记录。
  • 异步日志记录 :spdlog 支持异步日志记录,这意味着它可以将
    日志消息发送到线程池进行处理,从而减少对主线程性能的影
    响。
  • 高效地格式化 :spdlog 使用 fmt 库进行高效的字符串格式化,
    减少了格式化日志消息所需的时间。

特征:

  • 极高的日志记录速度 : spdlog 能够在每秒记录数百万条日志消
    息,这对于需要处理大量日志数据的应用来说是非常重要的。
  • 低内存占用 : spdlog 的设计确保了即使在高负载下,它也能保持
    低内存占用。
  • 灵活的配置 : 用户可以根据需要配置 spdlog,选择异步或同步日
    志记录,以及选择不同的日志级别和输出目标。

输出控制:

  • 多种日志级别 : spdlog 支持多种日志级别,包括 trace、
    debug、info、warn、error 和 critical,用户可以根据需要选择
    合适的日志级别。
  • 多种输出目标 : 用户可以将日志输出到控制台、文件或通过网络
    发送到远程服务器。接收器
  • 格式化输出 : spdlog 支持格式化输出,允许用户以结构化的方式
    输出日志消息。

logger->log 在异步日志中仅仅是发布一个消息到线程池

默认的logger输出:stdout, colored, multithreaded

Loggers 负责记录日志消息,Sinks 决定了日志消息的输出位置,Formatters 负责将日志消息转换为特定格式,AsyncLogger 异步地将日志消息写入到目标 Sink 中,Registry 用于管理这些组件。

面试题:spdlog中的每一个logname对应一个shared_ptr吗?

在spdlog库中,每个日志记录器(logger)通常由一个shared_ptr管理。这意味着每个具有唯一名称(logname)的记录器都是通过一个shared_ptr来引用和管理的。这样做的好处是便于记录器的共享和自动管理内存。

当你创建一个记录器时,例如使用spdlog::get(name)spdlog::basic_logger_mt(name, filename),如果这个名字的记录器已经存在,spdlog将返回一个指向现有记录器的shared_ptr。如果记录器不存在,则会创建一个新的记录器,并以shared_ptr的形式返回。

这种设计允许多个部分的代码共享对同一个记录器的访问,而不需要担心何时释放相关资源,因为当最后一个shared_ptr被销毁时,记录器的内存将自动被释放。

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

相关推荐
专注VB编程开发20年2 小时前
除了 EasyXLS,加载和显示.xlsx 格式的excel表格,并支持单元格背景色、边框线颜色和粗细等格式化特性
c++·windows·excel·mfc·xlsx
夏天的阳光吖3 小时前
C++蓝桥杯基础篇(四)
开发语言·c++·蓝桥杯
oioihoii4 小时前
C++17 中的 std::to_chars 和 std::from_chars:高效且安全的字符串转换工具
开发语言·c++
张胤尘4 小时前
C/C++ | 每日一练 (2)
c语言·c++·面试
超爱吃士力架5 小时前
MySQL 中的回表是什么?
java·后端·面试
強云5 小时前
23种设计模式 - 装饰器模式
c++·设计模式·装饰器模式
yatingliu20195 小时前
代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数 、1. 两数之和
c++·算法
鄃鳕6 小时前
单例模式【C++设计模式】
c++·单例模式·设计模式
只做开心事6 小时前
C++之特殊类设计
开发语言·c++
宋康6 小时前
C/C++ 指针避坑20条
c语言·开发语言·c++