新闻中心

C++怎么使用spdlog库来记录日志_C++日志系统与spdlog使用

2025-11-10
浏览次数:
返回列表
spdlog是C++中高性能日志库,支持多线程安全、异步写入与多种输出格式;通过vcpkg、Conan或手动集成引入头文件即可使用;提供默认日志器并支持创建控制台、文件及滚动日志器;可自定义日志级别与格式,启用debug需set_level;异步模式需init_thread_pool提升性能;异常spdlog_ex需try-catch处理。

c++怎么使用spdlog库来记录日志_c++日志系统与spdlog使用

在C++项目中,日志系统是调试、监控和排查问题的重要工具。spdlog 是一个高性能、易用的开源日志库,基于现代C++(C++11及以上)设计,支持多线程安全、异步日志、多种日志级别和格式化输出,广泛应用于实际开发中。

安装与配置 spdlog

spdlog 是 header-only 的库,意味着你不需要编译它,只需包含头文件即可使用。最简单的集成方式是通过包管理器或直接下载源码。

方法一:使用 vcpkg

vcpkg install spdlog

方法二:使用 Conan

conan install spdlog/1.13.0@

方法三:手动集成
从 GitHub 下载 spdlog 源码:

https://github.com/gabime/spdlog

include 目录加入编译路径,在代码中包含即可:

#include

基本使用方法

spdlog 提供了默认日志器(logger),可以快速开始记录日志。

示例代码:

#include
int main() {
    spdlog::info("这是一个信息日志");
    spdlog::warn("这是一个警告日志");
    spdlog::error("这是一个错误日志");
    spdlog::debug("调试信息,可能不会显示");
    return 0;
}

注意:debug 日志在非 DEBUG 模式下默认不输出,需启用:

spdlog::set_level(spdlog::level::debug);

创建自定义日志器

除了默认日志器,你可以创建多个日志器,用于不同模块或输出目标。

控制台日志器

auto console_logger = spdlog::stdout_color_mt("console");
console_logger->info("输出到控制台");

文件日志器

Yaara Yaara

使用AI生成一流的文案广告,电子邮件,网站,列表,博客,故事和更多…

Yaara 95 查看详情 Yaara auto file_logger = spdlog::basic_logger_mt("file_logger", "app.log");
file_logger->info("这条日志会写入 app.log 文件");

每日滚动日志

auto daily_logger = spdlog::daily_logger_mt("daily_logger", "logs/daily.log", 2, 30); // 每天凌晨2:30滚动

设置日志格式

spdlog 支持灵活的日志格式设置。可以通过模式字符串定义输出样式。

spdlog::set_pattern("[%Y-%m-%d %H:%M:%S] [%l] %n: %v");

常用格式符号:

  • %v:日志内容
  • %l:日志级别(info、error等)
  • :日志器名称
  • %t:线程ID
  • %Y/%m/%d %H:%M:%S:时间

也可以为单个日志器设置格式:

console_logger->set_pattern("[%H:%M:%S] %v");

异步日志(提升性能)

在高并发场景下,同步写日志可能影响性能。spdlog 支持异步日志,通过后台线程写入。

spdlog::init_thread_pool(8192, 1); // 初始化线程池
auto async_file = spdlog::basic_logger_mt<:async_logger>("async_logger", "async.log");
async_file->info("这条日志是异步写入的");

注意:需链接线程库(如 pthread),并在程序结束前调用:

spdlog::shutdown();

错误处理与运行时检查

spdlog 默认会在日志失败时抛出 spdlog_ex 异常。你可以捕获并处理:

try {
    auto logger = spdlog::rotating_logger_mt("rotate", "logs/rotating.log", 1024, 5);
} catch (const spdlog::spdlog_ex &e) {
    std::cerr }

也可关闭异常模式,改用静默错误处理:

spdlog::cfg::load_env_levels(); // 可选:从环境变量控制日志级别

基本上就这些。spdlog 使用简单但功能强大,适合大多数C++项目的日志需求。合理使用日志级别、输出目标和格式,能极大提升开发效率和系统可维护性。

以上就是C++怎么使用spdlog库来记录日志_C++日志系统与spdlog使用的详细内容,更多请关注其它相关文章!


# spdlog  # 这条  # 也可  # 你可以  # 进阶  # 这是一个  # 多线程  # 如何使用  # 格式化输出  # ai  # 工具  # app  # github  # git  # c++  # asic  # seo文章做图  # 南昌seo搜索平台推广  # seo按天计费系统租用  # 益阳软文营销推广  # 珠海网站排名推广  # 小漫画网站推广怎么做  # 湖北互动营销推广机构  # seo没帽子 快照劫持  # 网站推广 优化  # 免费动态网站建设  # 库中  # 有什么区别  # 自定义 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 限制HTML日期输入框的日期选择范围  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】  魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】  HTML长属性值处理:表单action路径优化与代码规范应对  css链接悬停下划线样式如何自定义_使用::after结合content和transition  解决Flask中Quill编辑器内容提交失败及TypeError的指南  学习通在线学习平台 学习通网页版直接进入课程中心  C++如何操作注册表_Windows平台下C++读写注册表的API函数详解  抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站  1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】  ArrayList与LinkedList操作复杂度详解:遍历与修改  QQ网页版官方账号入口 QQ网页版网页版登录指南  Python大型XML文件高效流式解析教程  AO3同人作品网入口 AO3搜索引擎官网永久地址  CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题  狙击外星人小游戏开始_狙击外星人小游戏立即开始  虫虫漫画精品漫画官网_虫虫漫画精品漫画官网进入精品漫画  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略  Log4j Console Appender性能瓶颈与高并发优化策略  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等  在哪找SublimeJ远程工具_SFTP插件配置教程  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  在Socket.IO连接中实现Access Token自动更新与动态重连  实现全屏滚动与导航点:专业教程  微信语音通话掉线如何解决 微信语音通话稳定优化方法  我的世界官方游戏入口 我的世界官网平台直达链接  如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构  必由学官方登录入口 必由学教师学生账号快速访问  菜鸟取件码是什么怎么查 最全查询渠道汇总  如何使用CaptainHook和Composer管理Git钩子_在提交前自动运行代码检查的Composer配置  构建轻量级网站内部消息系统:Formspree 集成指南  Golang如何使用context实现超时取消_Golang context超时取消模式实践  2025-2030年全球乘用车销量预测:新能源成增长主力  J*a递归快速排序中静态变量导致数据累积问题的解决方案  在Runstone环境中高效处理TasteDive API的JSON数据  小米Civi 4录制视频过暗_小米Civi 4亮度优化  windows10怎么查看硬盘序列号_windows10硬盘id查询命令  msn官网入口地址手机版 msn官方网站手机最新链接  C++ explicit关键字防止隐式转换_C++构造函数安全规范  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  深入理解J*aScript Promise异步执行与微任务队列 

搜索