异步日志方案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

相关推荐
W23035765732 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
.Ashy.2 小时前
2026.4.11 蓝桥杯软件类C/C++ G组山东省赛 小记
c语言·c++·蓝桥杯
minji...3 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
CoderCodingNo5 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法
Moment6 小时前
AI 全栈指南:NestJs 中的 Service Provider 和 Module
前端·后端·面试
Moment6 小时前
AI全栈入门指南:NestJs 中的 DTO 和数据校验
前端·后端·面试
hetao17338377 小时前
2026-04-09~12 hetao1733837 的刷题记录
c++·算法
6Hzlia7 小时前
【Hot 100 刷题计划】 LeetCode 136. 只出现一次的数字 | C++ 哈希表&异或基础解法
c++·算法·leetcode
Moment7 小时前
当前端开始做 Agent 后,我才知道 LangGraph 有多重要❗❗❗
前端·后端·面试