spdlog 用于 C++:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 spdlog,为什么需要它?



spdlog 是一个基于 MIT 许可证的超快速、仅头文件的 C++ 日志库。其主要特点在于通过异步写入、最小化内存分配以及利用 C++11/14/17 的现代特性,实现了令人难以置信的性能。在基准测试中,spdlog 的速度通常比 glog 或 Boost.Log 等库快 5 到 10 倍。



为什么使用 spdlog?在任何非平凡的 C++ 应用程序中,日志记录不是奢侈品,而是必需品。它有助于:

  • 调试错误:在没有调试器的生产环境中。
  • 跟踪程序执行流程(追踪)。
  • 分析性能(测量代码段的执行时间)。
  • 进行安全审计(记录登录尝试、数据更改)。


spdlog 提供了一个灵活的系统:您可以将日志写入控制台、文件(包括按大小或时间轮转)、系统日志(syslog)、数据库(通过 ODBC),甚至通过网络发送它们。支持异步模式,允许在写入日志时不阻塞应用程序的主线程。



安装 spdlog



与 Python 不同,C++ 没有统一的包管理器,但有几种标准方法来安装 spdlog。



方法 1:仅头文件(推荐入门)

最简单的方法是下载头文件并将其直接包含到您的项目中。无需编译。

  1. 从 GitHub 下载 最新版本。
  2. 解压存档。
  3. 将 include/spdlog 文件夹复制到您的项目中。
  4. 在代码中使用 #include "spdlog/spdlog.h"。


方法 2:通过 vcpkg 包管理器

vcpkg 是 Microsoft 提供的流行 C++ 包管理器。

# 安装git clone https://github.com/Microsoft/vcpkg.gitcd vcpkg./bootstrap-vcpkg.sh  # 或在 Windows 上使用 bootstrap-vcpkg.bat./vcpkg install spdlog

# 与您的构建系统集成./vcpkg integrate install


方法 3:通过 Conan

Conan 是另一个流行的包管理器。

# 在 conanfile.txt 文件中[requires]spdlog/1.12.0

[generators]cmake_find_package

# 安装conan install . --build=missing


方法 4:CMake FetchContent(现代方法)

如果您使用 CMake,可以直接从仓库拉取库:

include(FetchContent)FetchContent_Declare(  spdlog  GIT_REPOSITORY https://github.com/gabime/spdlog.git  GIT_TAG v1.12.0)FetchContent_MakeAvailable(spdlog)

# 在您的 target 中target_link_libraries(my_app PRIVATE spdlog::spdlog)


快速入门与代码示例



让我们编写一个简单的程序,将不同级别的日志输出到控制台和文件。



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

int main() { // 1. 创建控制台日志器(默认带颜色) auto console = spdlog::stdout_color_mt("console");

// 2. 创建文件日志器 auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log");

// 3. 设置日志级别(默认为 trace) spdlog::set_level(spdlog::level::trace);

// 4. 写入不同级别的消息 console->trace("这是 trace 消息(最详细的级别)"); console->debug("Debug: 变量 x 的值为 {}", 42); console->info("程序启动成功"); console->warn("警告:内存即将耗尽"); console->error("错误:无法打开文件"); console->critical("严重错误:系统崩溃");

推荐