什么是 spdlog,为什么需要它?
spdlog 是一个基于 MIT 许可证的超快速、仅头文件的 C++ 日志库。其主要特点在于通过异步写入、最小化内存分配以及利用 C++11/14/17 的现代特性,实现了令人难以置信的性能。在基准测试中,spdlog 的速度通常比 glog 或 Boost.Log 等库快 5 到 10 倍。
为什么使用 spdlog?在任何非平凡的 C++ 应用程序中,日志记录不是奢侈品,而是必需品。它有助于:
- 调试错误:在没有调试器的生产环境中。
- 跟踪程序执行流程(追踪)。
- 分析性能(测量代码段的执行时间)。
- 进行安全审计(记录登录尝试、数据更改)。
spdlog 提供了一个灵活的系统:您可以将日志写入控制台、文件(包括按大小或时间轮转)、系统日志(syslog)、数据库(通过 ODBC),甚至通过网络发送它们。支持异步模式,允许在写入日志时不阻塞应用程序的主线程。
安装 spdlog
与 Python 不同,C++ 没有统一的包管理器,但有几种标准方法来安装 spdlog。
方法 1:仅头文件(推荐入门)
最简单的方法是下载头文件并将其直接包含到您的项目中。无需编译。
- 从 GitHub 下载 最新版本。
- 解压存档。
- 将
include/spdlog文件夹复制到您的项目中。 - 在代码中使用
#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("严重错误:系统崩溃");