spdlog介绍使用

spdlog 是一个高性能、易于使用的 C++ 日志库,专注于提供快速的日志记录功能。它支持多线程、异步日志、格式化日志以及多种日志输出方式(例如,控制台、文件等)。由于它的高性能特点,spdlog 很适合用于对性能要求较高的应用程序,例如游戏开发、实时系统、无人机系统等。

spdlog 详细介绍

  1. 主要特点

高性能:spdlog 是为高性能设计的,通常比其他日志库更快。它通过减少内存分配、使用无锁队列等方式优化性能。

支持多线程:spdlog 支持多线程环境,并且使用异步日志功能时,可以避免阻塞主线程。

日志级别:支持 trace、debug、info、warn、error、critical、off 等多种日志级别。

格式化输出:可以使用类似 printf 的语法对日志进行格式化,支持自定义日志格式。

支持异步日志:支持异步日志记录,避免对主线程的阻塞。

输出方式灵活:可以同时将日志输出到控制台和文件。

易于集成:spdlog 设计简单,可以快速集成到现有项目中。

  1. 安装 spdlog
    安装方式一:使用包管理工具

vcpkg 安装(推荐)

vcpkg 是一个跨平台的 C++ 库管理工具,使用它可以轻松地在项目中安装并管理 spdlog 库。

步骤:

安装 vcpkg(如果还没有安装的话):

git clone https://github.com/microsoft/vcpkg.git

cd vcpkg

./bootstrap-vcpkg.sh # Linux/macOS

.\bootstrap-vcpkg.bat # Windows

安装 spdlog:

./vcpkg install spdlog # Linux/macOS

.\vcpkg install spdlog # Windows

在你的项目中链接 spdlog 库:

-I/installed/x64-linux/include # 包含目录

-L/installed/x64-linux/lib # 库目录

这样,spdlog 会自动安装并配置好,你可以直接在代码中使用它。

使用 Conan 安装

Conan 是另一个流行的 C++ 包管理工具,它也支持 spdlog 的安装。

步骤:

创建 conanfile.txt(文件内容如下):

requires

spdlog/1.9.2

generators

cmake

使用 conan 安装:

conan install .

在 CMake 中配置:

find_package(spdlog REQUIRED)

target_link_libraries(your_target PRIVATE spdlog::spdlog)

安装方式二:手动安装

下载源代码:

你可以从 spdlog 的 GitHub 仓库下载最新版本的源代码:

git clone https://github.com/gabime/spdlog.git

cd spdlog

将源代码添加到项目中:

你可以将 spdlog 的源代码直接放入你的项目目录,然后在项目中包含它:

#include "spdlog/spdlog.h"

然后在编译时链接相关的文件,通常通过 CMake 或其他构建工具来完成。

  1. 使用 spdlog
    基础使用

日志记录:

通过 spdlog,你可以使用不同的日志级别记录日志:

#include "spdlog/spdlog.h"

int main() {

// 日志记录

spdlog::info("This is an info message.");

spdlog::warn("This is a warning message.");

spdlog::error("This is an error message.");

spdlog::critical("This is a critical message.");

return 0;

}

这将会在控制台输出类似以下内容:

2023-01-01 12:34:56.789\] \[info\] This is an info message. \[2023-01-01 12:34:56.789\] \[warn\] This is a warning message. \[2023-01-01 12:34:56.789\] \[error\] This is an error message. \[2023-01-01 12:34:56.789\] \[critical\] This is a critical message. 格式化日志: spdlog 支持类似 printf 的格式化语法: spdlog::info("This is an integer: {}, and this is a float: {}", 42, 3.14); 自定义日志格式: 可以通过 spdlog::set_pattern() 设置日志的格式: spdlog::set_pattern("\[%Y-%m-%d %H:%M:%S\] \[%l\] %v"); spdlog::info("This is an info message with a custom format."); 其中,%Y 表示年份,%m 表示月份,%l 表示日志级别,%v 是日志内容。 日志级别 spdlog 支持的日志级别从最低到最高依次为: trace:用于调试信息,日志量大。 debug:调试日志,通常用于开发过程中。 info:一般信息日志,适用于应用正常运行时的输出。 warn:警告日志,表示潜在的风险或问题。 error:错误日志,表示出现了错误。 critical:严重错误,通常意味着系统无法继续运行。 off:关闭日志记录。 设置日志级别: spdlog::set_level(spdlog::level::debug); // 设置日志级别为 debug 异步日志 spdlog 支持异步日志记录,它会在后台线程中处理日志,避免影响主线程性能: spdlog::set_async_mode(8192); // 设置异步队列大小 spdlog::info("This message is logged asynchronously."); 日志输出到文件 你可以创建一个文件日志器,输出日志到文件中: auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/my_log.txt"); file_logger-\>info("This is a message written to a file."); 多日志器支持 你可以创建多个日志器,分别输出到控制台、文件或其他地方: auto console_logger = spdlog::stdout_color_mt("console_logger"); console_logger-\>info("This is a message to the console."); auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/my_log.txt"); file_logger-\>info("This is a message written to a file."); 4. 配置 spdlog 日志文件轮转 spdlog 支持日志文件轮转,可以设置文件大小或日期来控制文件轮转: auto rotating_logger = spdlog::rotating_logger_mt("rotating_logger", "logs/rotate_log.txt", 1048576, 3); // 1MB 每个文件,最多保存 3 个文件 rotating_logger-\>info("This is a rotated log."); 设置日志输出到多个地方 auto console = spdlog::stdout_color_mt("console"); auto file = spdlog::basic_logger_mt("file", "logs/output.txt"); spdlog::set_default_logger(console); file-\>info("This log goes to both console and file."); 总结 spdlog 是一个高效、易用、灵活的 C++ 日志库,适用于高性能、实时应用。 安装可以通过包管理工具(如 vcpkg 或 conan)进行,也可以手动从 GitHub 下载源代码并集成到项目中。 提供了丰富的功能,包括日志级别、异步日志、多线程支持、日志格式化等,可以满足大多数项目的需求。

相关推荐
西岸行者6 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习