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.");

  1. 配置 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 下载源代码并集成到项目中。

提供了丰富的功能,包括日志级别、异步日志、多线程支持、日志格式化等,可以满足大多数项目的需求。

相关推荐
宝绿特塑业再生科技7 小时前
改性HDPE再生颗粒在户外家具挤出发泡板材中的色差控制与高品质价值重构
经验分享·科技·学习·生活·1024程序员节·户外家具
andrsted10 小时前
练题簿在线免费刷题:让整理过的资料,变成能反复练习的题库
学习·微信小程序·小程序·学习方法·刷题·1024程序员节
Alsn8611 小时前
Windows 安装 Ollama 及本地模型部署
学习·1024程序员节
欣欣之王来了12 小时前
原始HTML插值:v-html指令的使用与安全风险
前端·学习·架构·项目·vue3教程
知识分享小能手14 小时前
C学习教程,从入门到精通,C语言学生信息管理系统 — 知识点详解(18)
c语言·学习·1024程序员节
破芽14 小时前
learn-claude-code-s05-s11-学习笔记
笔记·学习
pipixia2003314 小时前
C++ 面试高频:namespace 的 6 个知识点,从 using 到匿名命名空间
c语言·学习·算法·嵌入式·命名空间·c++面试·匿名命名空间
每天题库15 小时前
汽车维修工等级考试题库 理论实操核心考点一次梳理清
学习·安全·考试·题库·考证
神也畏惧菠萝15 小时前
想要学习Agent应用开发?:2026 AI Agent开发全栈通关路线
学习·langgraph·mcp协议·agent开发·rag架构·prompt高级工程
程序猿乐锅16 小时前
【从0-1学习Python | 第七篇】Python 面向对象基础
开发语言·笔记·后端·python·学习·1024程序员节