当前位置: 首页 > news >正文

spdlog 介绍与使用指南

spdlog 介绍与使用指南

1. spdlog 简介

spdlog 是一个快速的 C++ 日志库,具有以下特点:

  • 高性能:非常低的开销,异步模式下可以达到每秒数百万条日志
  • 头部文件库:只需包含头文件即可使用
  • 跨平台:支持 Windows、Linux、MacOS
  • 丰富的功能:多线程、日志轮换、多种日志级别等
  • 灵活的输出:支持控制台、文件、系统日志等多种输出方式

2. 安装 spdlog

2.1 使用包管理器安装

# vcpkg
vcpkg install spdlog# Conan
conan install spdlog/1.11.0

2.2 从源码安装

git clone https://github.com/gabime/spdlog.git
cd spdlog
mkdir build && cd build
cmake .. && make -j
sudo make install

2.3 直接包含头文件(最简单方式)

只需将 spdlog 头文件放入你的项目 include 路径即可。

3. 基本使用

3.1 简单示例

#include <spdlog/spdlog.h>int main() {// 设置日志级别spdlog::set_level(spdlog::level::debug);// 输出不同级别的日志spdlog::debug("This is a debug message");spdlog::info("Welcome to spdlog!");spdlog::warn("This is a warning");spdlog::error("This is an error message");spdlog::critical("This is a critical message!");// 格式化输出spdlog::info("Hello, {}!", "World");spdlog::info("PI is {:.2f}", 3.14159);return 0;
}

3.2 日志级别

spdlog 有以下日志级别(从低到高):

  1. trace - 非常详细的调试信息
  2. debug - 调试信息
  3. info - 常规信息
  4. warn - 警告信息
  5. error - 错误信息
  6. critical - 严重错误信息
  7. off - 关闭所有日志

4. 高级功能

4.1 创建日志器

#include <spdlog/sinks/basic_file_sink.h>int main() {// 创建文件日志器auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/basic-log.txt");file_logger->info("This message will be written to the file");// 创建控制台日志器auto console = spdlog::stdout_color_mt("console");console->info("This message will appear on the console");// 使用特定日志器spdlog::get("file_logger")->info("Another way to use the logger");return 0;
}

4.2 异步日志

#include <spdlog/async.h>int main() {// 创建异步日志器spdlog::init_thread_pool(8192, 1); // 队列大小和线程数auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_file_logger", "logs/async-log.txt");for (int i = 0; i < 100; ++i) {async_file->info("Async message #{}", i);}spdlog::drop_all(); // 确保所有日志在程序结束前被刷新return 0;
}

4.3 日志轮换

#include <spdlog/sinks/rotating_file_sink.h>int main() {// 创建轮换日志器,最大5MB,保留3个文件auto rotating_logger = spdlog::rotating_logger_mt("rotating_logger", "logs/rotating.txt", 1048576 * 5, 3);for (int i = 0; i < 10000; ++i) {rotating_logger->info("Log message #{}", i);}return 0;
}

4.4 多接收器日志器

#include <spdlog/sinks/stdout_color_sinks.h>
#include <spdlog/sinks/basic_file_sink.h>int main() {// 创建多个接收器auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();auto file_sink = std::make_shared<spdlog::sinks::basic_file_sink_mt>("logs/multisink.txt");// 组合接收器创建日志器spdlog::logger logger("multi_sink", {console_sink, file_sink});logger.set_level(spdlog::level::debug);logger.info("This message goes to both console and file");logger.warn("Warning message on both outputs");return 0;
}

5. 自定义格式

int main() {// 获取默认日志器并设置格式auto logger = spdlog::default_logger();logger->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%^%l%$] [thread %t] %v");logger->info("Custom format message");// 格式说明:// %Y - 年// %m - 月// %d - 日// %H - 小时// %M - 分钟// %S - 秒// %e - 毫秒// %l - 日志级别// %t - 线程ID// %v - 实际消息return 0;
}

6. 性能建议

  1. 对于高性能场景,使用异步日志
  2. 避免在日志语句中进行复杂计算
  3. 生产环境中适当提高日志级别(如 info 或 warn)
  4. 对于频繁调用的代码路径,考虑使用宏定义来完全移除日志语句

7. 总结

spdlog 是一个功能强大且易于使用的 C++ 日志库,适合从简单到复杂的各种应用场景。它的高性能和灵活性使其成为许多 C++ 项目的首选日志解决方案。

http://www.xdnf.cn/news/946225.html

相关文章:

  • lambda的惰性求值方法与及早求值方法
  • Vue3 PC端 UI组件库我更推荐Naive UI
  • go 里面的指针
  • [蓝桥杯 2024 国 Java B] 美丽区间
  • pymilvus
  • VRFF: Video Registration and FusionFramework 论文详解
  • 启动已有小程序项目
  • 详解K8s 1.33原地扩缩容功能:原理、实践、局限与发展
  • 【K8S】Kubernetes从入门到实战:全面指南
  • 云原生K8s+Docker+KubeSphere+DevOps
  • K8S认证|CKS题库+答案| 9. 网络策略 NetworkPolicy
  • 上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
  • AspectJ 在 Android 中的完整使用指南
  • 博睿数据×华为, 共筑智慧金融新未来
  • UE5 学习系列(一)创建一个游戏工程
  • 机器学习监督学习实战六:五种算法对新闻组英文文档进行文本分类(20类),词频统计和TF-IDF 转换特征提取方法理论和对比解析
  • 【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
  • 让 Kubernetes (K8s) 集群 使用 GPU
  • 阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
  • k8s从入门到放弃之Service负载均衡
  • AWS vs 阿里云:功能、服务与性能对比指南
  • 轻量级关键点 blaze pose 2025
  • SpringCloud优势
  • 软件工程教学评价
  • CentOS 7 部署 Samba 使用虚拟用户笔记
  • centos 7 部署awstats 网站访问检测
  • GO语言---init函数
  • Vue 3 实战:【加强版】公司通知推送(WebSocket + token 校验 + 心跳机制)
  • 软件工程 期末复习
  • 【Linux开发】Hi3516dv300-DC-182型开发板显示开机logo的相关操作