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

  • 23
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值