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

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

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

相关文章

纺织业搭跨境电商快车 浙江国潮服饰 “出海”正当时

近期的多篇报道均聚焦于纺织业中浙江国潮服饰品牌利用跨境电商平台加速国际化进程的趋势,以下是对这一现象的综合概述: 行业背景与趋势:国潮兴起:融合传统中国元素的服饰已经成为全球时尚潮流的一部分,受到国内外消费…

Linux系统----信号(万字文章超级详细并且简单易学附有实操shell指令图及注释!)

绪论​ “Do one thing at a time, and do well.”,本章开始Linux系统其中信号是学习操作系统的基本下面将会讲到什么是信号、信号的多种产生方式、信号如何保存的、信号如何处理的、以及一些信号的细节。话不多说安全带系好,发车啦(建议电脑…

金属输送带是什么

金属输送带:现代工业中的重要组成部分 金属输送带,也称为金属传送带或金属网带,是一种广泛应用于各种工业领域的输送设备。它由金属丝、金属板或金属网制成,通过链轮、齿轮或滚筒驱动,用于在生产线或工艺过程中运输各…

【鸿蒙】通知

一、概要 Android的Notification。 说到通知,就想到了推送。 通知这块可以做到不像Android一样需要集成各家厂商的推送了,不知道是否有建立独立的推送系统 这是官网上介绍的跨APP进行的IPC通知。实际在Android开发过程中,可能这种场景会相对…

MarginNote 3 for Mac:一站式思维导图与笔记神器,让学习更高效

MarginNote 3 for Mac是一款功能强大的阅读和学习工具软件,它将PDF/EPUB阅读器和多种学习工具集成起来,旨在帮助用户更有效地进行阅读、笔记整理以及知识管理。 这款软件的核心功能在于其能够将阅读与学习过程紧密结合。用户可以在阅读文档时&#xff0…

C++之特殊类的设计

目录 一、设计一个类,不能被拷贝 二、设计一个类,只能在堆上创建对象 方案一、析构函数私有 方案二、构造函数私有 三、设计一个类,只能在栈上创建对象 四、设计一个类,不能被继承 一、设计一个类,不能被拷…

勒索软件安全防护手册

文章目录 相关背景勒索软件概述勒索软件主要类型文件加密类勒索软件数据窃取类勒索软件系统加密类勒索软件。屏幕锁定类勒索软件 勒索软件典型传播方式利用安全漏洞传播利用钓鱼邮件传播利用网站挂马传播利用移动介质传播利用软件供应链传播利用远程桌面入侵传播 典型勒索软件攻…

自动驾驶传感器篇: GNSSIMU组合导航

自动驾驶传感器篇: GNSS&IMU组合导航 1.GNSS1.1 GNSS 系统概述1.2 GNSS系统基本组成1. 空间部分(Space Segment):2. 地面控制部分(Ground Control Segment):3. 用户设备部分(Use…

Stable Diffusion WebUI 使用 VAE 增加滤镜效果

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 大家好,我是水滴~~ 本文主要介绍 VAE 模型,主要内容有:VAE 模型的概念、如果下载 VAE 模型、如何安装 VAE 模型、如…

开箱展示——深圳市雷龙发展的存储卡

最近收到了来自深圳市雷龙发展有限公司寄来的存储卡,奈何最近也没有好的嵌入式项目需要用到,哪这里就简单给大家展示一下吧。 原始包装大概就是这样子了垃,有两个存储芯片和一个简单的转接器,测试的时候可以把芯片焊接到转接器…

如何安装mysl驱动程序jar包

简介(为什么要安装mysql驱动jar包) MySQL 驱动程序(通常以 JAR 文件的形式提供)用于在 Java 应用程序中连接和与 MySQL 数据库进行交互。这些驱动程序提供了一组 API,使 Java 应用程序能够执行诸如查询、插入、更新和…

【月报】​Aavegotchi 开发更新 |2024 年 4 月版,多款游戏上新玩法

朋友们好! 春天来了,我们热情洋溢的团队很高兴能为 Gotchiverse 带来一堆新鲜的更新和丰富的功能。让我们一起来看看这次开发更新带来了什么: Gotchichain 选择定居基地 精神力量竞技场获得了 EBIC 更新 高奇守护者通过全新的进阶系统提升…

C# APS.NET CORE 6.0 WebApi在IIS部署报错

今天尝试着把基于 APS.NET CORE6.0开发的webAPI程序部署到IIS中,当打开网站地址时报错,无法打开,于是查找资料最终进行了解决。 打开 IIS →模块 查看列表中是否存在 AspNetCoreModuleV2,如下: 对应的应用池需要选择“…

海外云服务对比: AWS、GCP、Azure 与 DigitalOcean

云计算市场持续增长,预计到2030年将达到 2432.87 亿美元。在这个庞大的市场中,三家云服务提供商——亚马逊(AWS)、谷歌云平台(GCP)和微软Azure——共占云市场份额的64%。当用户选择云服务提供商来托管他们的…

【React】反向代理和修改打包后的目录

反向代理 前提是做了反向代理: 安装 http-proxy-middleware npm i http-proxy-middleware在src/下新建 setupProxy.js const proxy require("http-proxy-middleware");module.exports function(app) {app.use(proxy("/api", {target: &qu…

C++ | Leetcode C++题解之第44题通配符匹配

题目&#xff1a; 题解&#xff1a; class Solution { public:bool isMatch(string s, string p) {auto allStars [](const string& str, int left, int right) {for (int i left; i < right; i) {if (str[i] ! *) {return false;}}return true;};auto charMatch []…

时隔5年,MobileNet V4发布!

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 距离MobileNet系列上一代版本MobileNet V3的发布已经过去五年 熟悉该系列的同学应该知道&#xff0c;MobileNet致力于维持神经网络在精度和效率之间的微妙平衡&#xff0c;为了让用户在移动设备上拥有…

游戏帧数低怎么解决?

启用高性能模式 winR——输入control——查看方式&#xff1a;小图标——电源选项——隐藏附加计划——高性能模式 设置游戏模式 wins——游戏模式开启 设置显示卡 设置——系统——显示卡——添加应用&#xff0c;浏览——选项——高性能 NVIDIA控制面板设置 NVIDIA控制…

SHOW ME THE CODE - 面向对象程序设计之 - 单一职责原则

今天我们从代码的角度来讲一讲&#xff0c;到底什么是&#xff1a;单一职责原则 SRP的定义 Single Responsibility Principle, 单一职责原则 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;最早是由罗伯特C马丁&#xff08;Robert C. …

贪吃蛇撞墙功能的实现 和自动行走刷新地图 -- 第三十天

1.撞墙 1.1最初的头和尾指针要置为空&#xff0c;不然是野指针 1.2 在增加和删除节点后&#xff0c;判断是否撞墙&#xff0c;撞墙则初始话蛇 1.3在撞墙后初始化蛇&#xff0c;如果头不为空就撞墙&#xff0c;得定义临时指针指向头&#xff0c;释放头节点 2.自动刷新地图 2.1…