前言
spdlog 是一个高性能的 C++ 日志库,基于 fmt 提供格式化,支持同步与异步模式、日志切割(rotation)与多种 sink(控制台、文件、syslog 等)。它设计轻量、易集成,性能接近手写日志,适合对吞吐量和延迟有要求的服务端应用。
示例代码:
#include "spdlog/spdlog.h"
#include "spdlog/sinks/basic_file_sink.h"
int main() {
auto logger = spdlog::basic_logger_mt("file_logger", "logs/app.log");
spdlog::info("Hello {}!", "world");
logger->error("Error code: {}", 42);
return 0;
}
安装与集成
可通过 vcpkg、conan 或直接在 CMake 中 add_subdirectory(spdlog) 引入。常见配置包括启用异步日志以减少 I/O 阻塞、设置日志轮转与保留策略、以及自定义输出 pattern(时间、线程、文件名、行号等)。
实践小贴士
- 开发阶段用同步 logger 便于调试;生产环境用异步并配置合理的队列大小和 flush 策略,防止丢失关键日志;
- 针对高频日志考虑降低日志级别或聚合;
- 利用多种 sink 同时输出到控制台与文件,便于实时观察与持久化。
总结
spdlog 在性能与易用性之间取得良好平衡,是现代 C++ 项目推荐的日志方案。开始使用很简单,随着需求增长可以逐步调整异步、切割与格式化配置。