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实战训练系统,正是在这一背景下应运而生的一种创新的训练方法。该系统利用先进的虚拟现实技术,为飞行员提供真实且逼真的模拟飞行环境,使之能够在…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
