spdlog简单介绍和使用
spdlog
是一个C++的快速、可扩展的日志库,具有高性能和友好的接口。它支持多种日志输出目标,如控制台、文件、远程服务器等,并具有强大的日志格式化和异步日志记录功能。
以下是对spdlog
的简单介绍和使用示例:
安装 spdlog
你可以使用包管理工具(如CMake、vcpkg、Conan等)来安装spdlog,或者从GitHub仓库获取源代码进行构建。这里以CMake为例:
-
下载spdlog源代码或使用git克隆官方仓库:
git clone https://github.com/gabime/spdlog.git
-
在你的CMake项目中包含spdlog:
add_subdirectory(path_to_spdlog_source_directory)
-
在你的CMakeLists.txt中链接spdlog:
target_link_libraries(your_project_name PRIVATE spdlog::spdlog)
使用 spdlog
使用spdlog非常简单,以下是一个基本的示例:
#include <spdlog/spdlog.h>int main() {// 初始化spdlog,使用stdout作为输出目标auto console = spdlog::stdout_logger_mt("console");// 记录日志消息console->info("This is an informational message.");console->error("This is an error message.");console->critical("This is a critical message.");spdlog::info("Welcome to spdlog!"); return 0;
}
在上述示例中,我们首先包含了spdlog头文件,然后创建了一个名为"console"的日志记录器,并将其绑定到stdout(控制台)。接着,我们使用info
、error
和critical
方法记录不同级别的日志消息。
日志级别
spdlog
支持多种日志级别,包括以下几种:
trace
: 用于追踪信息。debug
: 用于调试信息。info
: 用于一般信息。warn
: 用于警告信息。error
: 用于错误信息。critical
: 用于严重错误信息。
你可以根据需要选择不同的级别来记录日志。默认情况下,spdlog
的日志级别是debug
,你可以在初始化日志记录器时指定不同的级别。
日志格式
spdlog
允许你自定义日志消息的格式。你可以使用占位符来指定日志消息中的各个部分,例如时间戳、日志级别、消息内容等。默认情况下,spdlog
使用一种简单的格式,但你可以通过设置自定义格式字符串来更改它。以下是一个示例:
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v");
这个示例将时间戳、日志级别和消息内容分别用占位符表示。
spdlog
还支持异步日志记录,可以提高日志记录的性能,特别是在多线程环境中。
这只是一个spdlog
的基本介绍和使用示例。你可以根据需要进一步探索其丰富的功能和配置选项,以满足特定的日志记录需求。
接下来我们详细介绍一下spdlog库的使用
创建和初始化日志记录器
在使用 spdlog
之前,需要创建和初始化一个或多个日志记录器。通常,你会在应用程序的入口处初始化日志记录器。以下是初始化日志记录器的示例:
#include <spdlog/spdlog.h>int main() {// 初始化默认日志记录器,使用stdout作为输出目标spdlog::stdout_logger_mt("console");// 初始化一个自定义日志记录器,使用文件作为输出目标auto file_logger = spdlog::basic_logger_mt("file_logger", "my_log.txt");// 设置日志级别spdlog::set_level(spdlog::level::debug);// 更多初始化和设置选项...// 记录日志消息spdlog::get("console")->info("This is an informational message.");spdlog::get("file_logger")->error("This is an error message.");// 关闭和销毁日志记录器spdlog::drop("console");spdlog::drop("file_logger");return 0;
}
在上述示例中,我们首先初始化了一个默认的日志记录器("console"),并将其绑定到stdout。然后,我们初始化了一个自定义的日志记录器("file_logger"),并将其绑定到名为"my_log.txt"的文件。我们还设置了日志级别为debug
,这意味着它将记录所有级别的日志。
记录日志消息
一旦初始化了日志记录器,就可以使用它来记录日志消息。spdlog
支持多种日志级别,包括 trace
、debug
、info
、warn
、error
和 critical
,你可以根据需要选择不同的级别来记录日志。以下是一些示例:
spdlog::get("console")->trace("This is a trace message.");
spdlog::get("console")->debug("This is a debug message.");
spdlog::get("console")->info("This is an informational message.");
spdlog::get("console")->warn("This is a warning message.");
spdlog::get("console")->error("This is an error message.");
spdlog::get("console")->critical("This is a critical message.");
自定义日志格式
spdlog
允许你自定义日志消息的格式。你可以使用占位符来指定日志消息中的各个部分,例如时间戳、日志级别、消息内容等。默认情况下,spdlog
使用一种简单的格式,但你可以通过设置自定义格式字符串来更改它。以下是一个示例:
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v");
这个示例将时间戳、日志级别和消息内容分别用占位符表示。
输出目标
spdlog
支持多种输出目标,包括控制台、文件、远程服务器等。你可以通过创建不同的日志记录器,并将它们绑定到不同的输出目标来实现多个日志通道。以下是一个输出目标示例:
auto file_logger = spdlog::basic_logger_mt("file_logger", "my_log.txt");
此示例将创建一个名为"file_logger"的自定义日志记录器,并将其绑定到名为"my_log.txt"的文件。
异步日志记录
spdlog
支持异步日志记录,可以提高日志记录的性能,特别是在多线程环境中。要启用异步日志记录,你可以使用以下方式初始化日志记录器:
auto async_file_logger = spdlog::basic_logger_st("async_file_logger", "async_log.txt");
在这个示例中,我们使用了_st
后缀,表示启用了异步日志记录。
spdlog
还提供了许多其他功能和选项,如日志文件的切割、回滚、日志旋转等。你可以根据具体需求进一步探索这些功能。
spdlog
是一个功能强大而又易于使用的C++日志库,适用于各种应用程序。请参考 spdlog
的官方文档以获取更多详细信息和用法示例:GitHub - gabime/spdlog: Fast C++ logging library.
相关文章:
spdlog简单介绍和使用
spdlog 是一个C的快速、可扩展的日志库,具有高性能和友好的接口。它支持多种日志输出目标,如控制台、文件、远程服务器等,并具有强大的日志格式化和异步日志记录功能。 以下是对spdlog的简单介绍和使用示例: 安装 spdlog 你可以…...

分类模型的Top 1和Top 5
分类模型的Top 1和Top 5 flyfish 模型分类的结果指标如下图 acc top1 和 acc top5这两列 关于Top 1和Top 5分两种 top 1 accuracy top 5 accuracy 和 top 1 error rate top 5 error rate 这里将需要评估的分类器称为模型 假如一共要测试N张图像,一共有1000个类…...
LinkdeList集合
1.LinkdeList集合的特点: 1.LinkedList是集合的一个实现类 2.LinkedList内部封装了一个双向链表 3.LinkedList集合的增删快,查询慢 4.线程不安全 2.LinkedList集合的方法 1.添加 1.boolean add(Object element) 将元素附加到链表末尾 2.boolean add(int…...

KaiOS APN配置文件apn.json调试验证方法(无需项目全编)
1、KaiOS 的应用就类似web应用,结合文件夹路径webapp字面意思理解。 2、KaiOS APN配置文件源代码在apn.json, (1)apn.json可以自定义路径,通过配置脚本实现拷贝APN在编译时动态选择路径在机器中生效。 (…...

【qemu逃逸】HWS2017-FastCP
前言 虚拟机用户名:root 虚拟机密码:无密码 本题有符号,所以对于设备定位啥的就不多说了,直接逆向设备吧。 设备逆向 在 realize 函数中设置一个时钟任务,并且可以看到只注册了 mmio,大小为 0x100000。…...
调节扬声器和麦克风的音量
const audioSrc require("./../../src/assets/music.mp3")// 调节扬声器音量switchYSQColumn(){//使用Audio对象创建一个新的音频元素const audioElement new Audio();//将音频元素的src属性设置为音频文件的urlaudioElement.src audioSrc;audioElement.play()//创…...

XShelll-修改快捷键-xftp-修改编辑器
文章目录 1.XShelll-修改快捷键2.Xftp-修改文本编辑器3.总结 1.XShelll-修改快捷键 工具>选项 鼠标键盘,右键编辑,新建快捷键。 复制粘贴改成shiftc,shiftv。更习惯一些。 2.Xftp-修改文本编辑器 xftp修改服务器文件默认的编辑器,是记…...

编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)
一.首符号集(First()) 技巧:找最左边可能出现的终结符 例: 1.First(E) E->T,最左边为T,又因为T->F,最左边为F,F->(E)|i,则最左边为{(,i } 2.First(T):只需要看符号串最左…...
远程仓库地址改变后更换url
请按照以下步骤进行操作: 打开终端或命令提示符,并导航到你的本地仓库目录。运行以下命令,查看当前的远程仓库配置:git remote -v 这将显示当前的远程仓库地址。 如果远程仓库地址显示为192.168.1.178,请使用以下命…...

VR全景如何助力乡村振兴,乡村发展在哪些方面用到VR全景技术
引言: 乡村振兴是当今中国发展的重要战略,也是推动农村经济社会全面发展的关键举措。在这一过程中,虚拟现实(VR)全景技术正逐渐崭露头角,为乡村振兴提供了机遇。 一.VR全景技术的概念和应用 1…...

21.6 Python 构建ARP中间人数据包
ARP中间人攻击(ARP spoofing)是一种利用本地网络的ARP协议漏洞进行欺骗的攻击方式,攻击者会向目标主机发送虚假ARP响应包,使得目标主机的ARP缓存中的IP地址和MAC地址映射关系被篡改,从而使得目标主机将网络流量发送到攻…...

DVWA靶场SQL注入
本次注入的是DVWA靶场的SQL injection 1.判断是字符型注入还是数字型注入,构造SQL语句 1 and 12 由此可以判断出为字符型注入 2.考虑闭合方式,先随便丢一个单引号试试看看报错提示 You have an error in your SQL syntax; check the manual that cor…...

AD教程 (九)导线及NetLabel的添加
AD教程 (九)导线及NetLabel的添加 添加导线 绘制导线 点击放置,选择线,或者直接CtrlW快速绘制注意要与绘图工具中的线区别开来,导线是具有电气属性的,绘图工具中的线没有电气属性,只是辅助线绘制导线过程…...
Rust函数进阶
文章目录 函数函数中的函数lambda表达式函数作为参数 Rust系列:初步⚙所有权⚙结构体和枚举类 函数 先来回顾一下Rust中函数的创建过程,在Rust中,函数用fn声明,如有传入参数或返回值,都需要声明数据类型,…...

springboot前后端时间类型传输
springboot前后端时间类型传输 前言1.java使用时间类型java.util.Date2.java使用localDateTime 前言 springboot前后端分离项目总是需要进行时间数据类型的接受和转换,针对打代码过程中不同的类型转化做个总结 1.java使用时间类型java.util.Date springboot的项目中使用了new …...
Deepin安装英特尔AX200 Wifi驱动
谁支持我的 Linux* 驱动程序? Linux 驱动程序是上游 Linux* 内核的一部分。它们通过常规渠道、分发,或 Linux* 内核档案 提供。我们仅支持作为内核版本中一部分的驱动程序的使用。请参阅下表以了解 iwlwifi 驱动程序支持的设备的列表。 在 英特尔 Wi-Fi…...
第十九节——vue内置组件
Vue提供了一些内置的组件,这些组件可以在Vue应用中直接使用,无需额外安装或配置。以下是一些常见的Vue内置组件 一、<transition> 和 <transition-group> 1、概念 <transition> 组件用于在元素插入或移除时应用过渡效果,…...
路由器基础(二): BGP原理与配置
BGP 是边界网关协议,目前版本为BGP4, 是一种增强的距离矢量路由协议。该协议运行在不同AS 的路由器之间,用于选择AS之间花费最小的协议。BGP协议基于TCP协议,端口为179。使用面向连接的TCP 可以进行身份认证,可靠地交换路由信息。…...

【漏洞复现】Django _2.0.8_任意URL跳转漏洞(CVE-2018-14574)
感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 1.5、修复建议 说明内容漏洞编号CVE-2018-14574漏洞名称Django任意URL跳转漏洞漏洞…...

【广州华锐互动】军用飞机VR实战训练系统
随着科技的飞速发展,虚拟现实(VR)技术为军事训练带来了前所未有的机遇。军用飞机VR实战训练系统,正是在这一背景下应运而生的一种创新的训练方法。该系统利用先进的虚拟现实技术,为飞行员提供真实且逼真的模拟飞行环境,使之能够在…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...