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日志库的使用 的相关文章

  • 在浏览器中点击应用程序时播放框架挂起

    我正在 Play 中运行一个应用程序activator run 也许 5 次中有 3 次 它会挂起 当我去http localhost 9000 它就永远坐在那里旋转 我看到很多promise timed out错误也 我应该去哪里寻找这个
  • 在数据流模板中调用 waitUntilFinish() 后可以运行代码吗?

    我有一个批处理 Apache Beam 作业 它从 GCS 获取文件作为输入 我的目标是根据执行后管道的状态将文件移动到两个 GCS 存储桶之一 如果管道执行成功 则将文件移动到存储桶 A 否则 如果管道在执行过程中出现任何未处理的异常 则
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • Linux:如何从特定端口发送TCP数据包?

    如何打开原始套接字以从特定 TCP 端口发送 我希望所有连接始终来自临时端口以下的一系列端口 如果您正在使用raw套接字 然后只需在数据包标头中填写正确的 TCP 源端口即可 相反 如果您使用 TCP 套接字接口 socket connec
  • hibernate总是自己删除表中的所有数据

    您好 我正在开发一个 spring mvc 应用程序 它使用 hibernate 连接到存储文件的 mysql 数据库 我有两个方法 一个方法添加我选择的特定文件路径中的所有文件 另一种方法调用查询以返回从 mysql 存储的文件列表 问题
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • org.jdesktop.application 包不存在

    几天以来我一直在构建一个 Java 桌面应用程序 一切都很顺利 但是今天 当我打开Netbeans并编译文件时 出现以下编译错误 Compiling 9 source files to C Documents and Settings Ad
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 使用 SAX 进行 XML 解析 |如何处理特殊字符?

    我们有一个 JAVA 应用程序 可以从 SAP 系统中提取数据 解析数据并呈现给用户 使用 SAP JCo 连接器提取数据 最近我们抛出了一个异常 org xml sax SAXParseException 字符引用 是无效的 XML 字符
  • Java - 不要用 bufferedwriter 覆盖

    我有一个程序可以将人员添加到数组列表中 我想做的是将这些人也添加到文本文件中 但程序会覆盖第一行 因此这些人会被删除 如何告诉编译器在下一个空闲行写入 import java io import java util import javax
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 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