Spdlog日志库的使用

2023-11-18

spdlog日志库

1.介绍:

Spdlog是一个快速、异步、跨平台、易于使用的C++日志库,旨在提供高性能、易用性和灵活性。它支持多线程环境和异步记录,支持多种日志级别和多个后端(如控制台、文件、网络等),并提供灵活的日志格式化选项。

以下是Spdlog的一些主要特点:

  1. 快速和异步记录:Spdlog使用内存映射文件和异步日志记录等技术,以提高日志记录的效率和性能。这意味着日志记录不会阻塞主线程,从而提高应用程序的吞吐量和响应速度。

  2. 多线程支持:Spdlog支持多线程环境,并提供了线程安全的日志记录。它通过使用互斥锁来保护共享资源,从而避免了多线程并发访问的问题。

  3. 多种日志级别:Spdlog支持多种日志级别,如trace、debug、info、warning、error和critical等。这些级别可以方便地控制日志记录的详细程度。

  4. 多个后端支持:Spdlog支持多个后端,包括控制台、文件、网络等。这些后端可以方便地进行配置和切换。

  5. 灵活的格式化选项:Spdlog提供了灵活的日志格式化选项,可以定制化地满足不同需求。它支持使用格式化字符串和用户自定义格式化器等方式来格式化日志记录。

  6. 跨平台支持:Spdlog可以在Windows、Linux、macOS等多个平台上运行,并提供了一致的API。这意味着您可以轻松地将Spdlog集成到您的跨平台应用程序中。

2.如何使用:

下载:

  • 通过GitHub获取源代码:https://github.com/gabime/spdlog/releases

    在该页面上,您可以找到Spdlog库的各个版本的源代码包,包括压缩文件和tarball。您可以选择下载相应的版本,并将其解压到您的项目文件夹中。

  • 使用包管理器下载

    在Ubuntu系统中,您可以使用以下命令安装Spdlog库:

    sudo apt-get install libspdlog-dev
    

安装:

  • 首先将下载好的spdlog源代码解压缩到需要使用的目录下
  • 进入下载的spdlog目录
cd spdlog
  • 使用CMake进行构建和安装。创建一个构建目录,然后执行CMake命令:
mkdir build
cd build
cmake ..
make
sudo make install
  • 安装完成后,spdlog库将被安装到系统的默认位置。

3.常用函数

在spdlog库中,有一些常用的函数可用于进行日志记录和配置。以下是一些常见的spdlog函数:

  1. spdlog::info()/spdlog::debug()/spdlog::warn()/spdlog::error():这些函数用于记录不同级别的日志消息。例如,spdlog::info("This is an info message")会记录一条信息级别的日志消息。

  2. spdlog::set_level():该函数用于设置全局日志级别。可以通过传递 spdlog::level::level_enum 枚举值来设置不同的日志级别,如 spdlog::set_level(spdlog::level::debug) 将日志级别设置为调试。

  3. spdlog::set_pattern():该函数用于设置日志消息的格式模式。可以使用占位符来定义日志消息的输出格式,如 %^[%Y-%m-%d %H:%M:%S.%e] [%n] [%l]%$ %v

    %^ 和 %$ 是用于设置终端颜色的特殊标记。[%Y-%m-%d %H:%M:%S.%e] 表示日期和时间信息,[%n] 表示日志记录器名称,[%l] 表示日志级别,%v 表示日志消息的内容。

  4. spdlog::set_default_logger():该函数用于设置默认的日志记录器。一旦设置了默认记录器,就可以使用全局的spdlog函数来记录日志,而无需传递记录器实例。例如,spdlog::info("This is a message using the default logger")

  5. spdlog::stdout_color_mt():该函数创建一个输出到标准输出的多线程日志记录器。例如,auto logger = spdlog::stdout_color_mt("console_logger") 创建一个名为 “console_logger” 的记录器。

  6. spdlog::rotating_logger_mt():该函数创建一个多线程的日志记录器,可以将日志消息写入轮转的文件中。例如,auto logger = spdlog::rotating_logger_mt("file_logger", "logs.log", 1024 * 1024 * 5, 3) 创建一个名为 “file_logger” 的记录器,将日志消息写入名为 “logs.log” 的文件中,最大文件大小为 5MB,最多保留 3 个文件。

  7. spdlog::basic_logger_mt():该函数创建一个写入到文件的基本日志记录器。例如,auto logger1 = spdlog::basic_logger_mt("basic_logger", "logs/basic-log.txt")创建一个名为"basic_logger"的记录器,将日志消息写入名为"logs/basic-log.txt"的文件中。

这些函数只是spdlog库中的一小部分功能。spdlog还提供了许多其他功能,如多线程安全、异步日志记录、自定义记录器等。你可以查阅spdlog的文档以获取完整的函数列表和更详细的用法说明。

#include <spdlog/spdlog.h>
#include <spdlog/sinks/basic_file_sink.h>

int main() {
    // 设置日志级别为调试
    spdlog::set_level(spdlog::level::debug);

    // 设置日志消息的格式模式
    spdlog::set_pattern("%^[%Y-%m-%d %H:%M:%S.%e] [%n] [%l]%$ %v");

    // 创建一个输出到标准输出的多线程日志记录器
    auto console_logger = spdlog::stdout_color_mt("console_logger");

    // 创建一个写入到文件的日志记录器,最大文件大小为5MB,最多保留3个文件
    auto file_logger = spdlog::rotating_logger_mt("file_logger", "logs.log", 1024 * 1024 * 5, 3);

    // 设置默认的日志记录器
    spdlog::set_default_logger(console_logger);

    // 使用默认的日志记录器记录不同级别的日志消息
    spdlog::info("This is an info message");
    spdlog::debug("This is a debug message");
    spdlog::warn("This is a warning message");
    spdlog::error("This is an error message");

    // 使用特定的日志记录器记录日志消息
    console_logger->info("This is a message using the console_logger");
    file_logger->info("This is a message using the file_logger");

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spdlog日志库的使用 的相关文章

  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • Apache 2 中的“捕获 SIGWINCH”错误是什么?

    我的服务器 ubuntu 8 04 LAMP运行drupal 6 当流量较高时 它会停止提供页面 重新启动apache2将不起作用 所以我必须重新启动该服务 我在 apache2 error log 中找到了这条消息 通知 捕获SIGWIN
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared

随机推荐

  • Microsoft Office 2021安装

    哈喽 大家好 今天一起学习的是office2021的安装 有兴趣的小伙伴也可以来一起试试手 一 测试演示参数 演示操作系统 Windows 11 支持Win10安装 不支持Win7 XP系统 系统类型 64位 演示版本 cn office
  • PMP估算方法对比:参数估算、类比估算、自下而上估算、三点估算和粗略量级估算

    目录 1 类比估算 2 参数估算 3 自下而上估算 4 三点估算 5 粗略量级估算 1 类比估算 英文全称 Analogous Estimating Technique 定义 与过去类似活动的参数值 如范围 成本 预算和持续时间等 或规模指
  • 快乐E栈项目实战第四阶段

    快乐E栈项目实战第四阶段 文章目录 快乐E栈项目实战第四阶段 1 思路 2 代码 3 结果 学完Java的IO操作 我们使用文件将快递信息存储起来 这样程序重新启动起来存储的快递信息也不会丢失 暂时不使用序列化进行存储 使用Properti
  • MySQL C/C++ API libmysqlclient-dev

    完整的API内容地址 https www mysqlzh com doc 196 html 接口 接口 解释 mysql library init 初始化MySQL C API库 mysql library end 最终确定MySQL C
  • Calendar的使用

    Calendar Calendar是一个抽象类 构造器被protected修饰 需要通过getInstance 获取实例 public static void main String args Calendar instance Calen
  • IDEA2021中VUE代码爆红解决方案

    1 在IDEA中安装vue js插件 找到vue js安装即可 之后点击apply gt OK 2 安装完成后打开cmd 输入npm v npm命令集成在node js里面 如果这条命令失败则前往node js进行相关的安装 3 爆红的主要
  • 解决Ubuntu 20.04网络无法连接,没有网络图标

    现象 网络适配器处于NAT 并且电脑主机有网络 但是Ubuntu20 04中没有网络 或者初次启动Ubuntu20 04时是由网络的 但后来不知是何原因导致网络不通 无法用浏览器访问百度 如下图右上角有线网络图标消失了 解决方法 删除Net
  • 【教程分享】Docker搭建Zipkin,实现数据持久化到MySQL、ES

    1 拉取镜像 指定版本 在git查看相应版本 参考 https github com openzipkin zipkin 如2 21 7 docker pull openzipkin zipkin 2 21 7 2 启动 Zipkin默认端
  • Mybatis源码阅读(四)-Spring集成Mybatis-Mapper接口的注入:MapperScannerConfigurer

    一 Spring包扫描注解注入会过滤掉接口类 在Spring IOC容器启动的过程中 Spring会在扫描 CompopnentScan指定的路径时 会将被 Component Service等注解的类自动注册BeanDefinition到
  • 微信小程序NPM使用及第三方依赖安装详解

    一 NPM 1 1NPM介绍 首先我们介绍NPM的使用 NPM是随同NodeJS一起安装的包管理工具 能解决NodeJS代码部署上的很多问题 常见的使用场景有以下几种 允许用户从NPM服务器下载别人编写的第三方包到本地使用 安装第三方依赖过
  • top命令浅析

    top 使用top命令会实时的刷新系统的负载信息 top命令的选项很多 此处只列举我个人觉得比较实用的几个选项 具体选项可以参考man top 进行查看 u user 只显示指定用户启动的进程 p pid 只显示指定pid的进程 d sec
  • 【图像分类】基于PyTorch搭建LSTM实现MNIST手写数字体识别(单向LSTM,附完整代码和数据集)

    写在前面 首先感谢兄弟们的关注和订阅 让我有创作的动力 在创作过程我会尽最大能力 保证作品的质量 如果有问题 可以私信我 让我们携手共进 共创辉煌 提起LSTM大家第一反应是在NLP的数据集上比较常见 不过在图片分类中 它同样也可以使用 我
  • 字节跳动自研万亿级图数据库 & 图计算实践

    本文选自 字节跳动基础架构实践 系列文章 字节跳动基础架构实践 系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容 和大家分享团队在基础架构发展和演进过程中的实践经验与教训 与各位技术同学一起交流成长 2019 年 Ga
  • 视频接口(2)—— MIPI Solution

    目录 1 MIPI概述 2 MIPI优点 3 CSI 2 3 1 多个物理通道字节数据格式 3 2 低电压等级协议特性 3 3 短包结构 3 4 长包结构 3 5 Data Identifier DI 3 6 数据类型类 3 7 帧同步包结
  • 关于type_C接口

    文章目录 概要 一 引脚定义 二 六脚Type c 三 12脚Type c 四 16脚Type c 五 usb3 0 概要 type C接口外观好看 双面插等众多优点 已经成为了现在主流的接口 一 引脚定义 VBus 总线电源 USB PD
  • androidのview游戏框架

    android view游戏框架 1 view游戏框架介绍 首先需要建立一个Activity public class MainActivity extends Activity Override public void onCreate
  • HTTPS加密过程详解

    目录 一 HTTPS是什么 1 1 运营商劫持 1 2 加密是什么 二 HTTPS的工作过程 2 1 对称加密 2 2 非对称加密 2 3 引入证书 一 HTTPS是什么 HTTPS 也是一个应用层协议 是在 HTTP 协议的基础上引入了一
  • 刷脸开门上班取外卖等都会无处不在

    刷脸支付的诞生掀起了支付宝微信的竞争关系 但其实在二维码支付开始流行时 支付宝和微信的竞争关系便已埋下种子 当时抢着做扫码支付的创业者更是一批接着一批 丝毫不亚于如今刷脸支付服务商的趋势 而早些入局扫码支付的创业者们 凭借扫码支付打了漂亮的
  • 批量生成文件夹内文件的目录

    在记事本内输入 dir b gt 文件目录 txt 后保存记事本文件为bat格式后点击执行便可以生成 批处理文件 在DOS和Windows 任意 系统中 bat文件是可执行文件 由一系列命令构成 其中可以包含对其他程序的调用 这个文件的每一
  • Spdlog日志库的使用

    spdlog日志库 1 介绍 Spdlog是一个快速 异步 跨平台 易于使用的C 日志库 旨在提供高性能 易用性和灵活性 它支持多线程环境和异步记录 支持多种日志级别和多个后端 如控制台 文件 网络等 并提供灵活的日志格式化选项 以下是Sp