0

0

c++如何进行日志记录 c++ spdlog库使用教程【指南】

冰火之心

冰火之心

发布时间:2026-01-04 19:33:15

|

892人浏览过

|

来源于php中文网

原创

spdlog 是 C++ 中主流轻量高效日志库,支持多线程、多输出目标、格式化与等级控制,无需 Boost 依赖;支持 header-only 使用,提供控制台、文件、滚动、每日分割等 logger,可自定义格式、级别,具备异步日志与自定义 sink 能力。

c++如何进行日志记录 c++ spdlog库使用教程【指南】

在 C++ 项目中做日志记录,spdlog 是目前最主流、轻量又高效的选择。它支持多线程、多种输出目标(控制台、文件、滚动文件)、丰富格式化、等级控制,且无需依赖 Boost 或其他重型库。

快速上手:安装与基础用法

spdlog 是 header-only 库(默认情况下),只需下载头文件即可使用;也可通过包管理器集成:

  • CMake + vcpkgvcpkg install spdlog,然后在 CMakeLists.txtfind_package(spdlog)
  • Conanconan install spdlog/1.14.1
  • 手动引入:从 GitHub 仓库 下载 include/spdlog 目录,加入编译 include 路径

最简示例(控制台日志):

#include "spdlog/spdlog.h"

int main() {
    spdlog::info("Hello, {}!", "world");           // INFO 级别
    spdlog::warn("This is a warning");
    spdlog::error("An error occurred: {}", 404);
    return 0;
}

创建不同类型的 logger 实例

全局 logger(如 spdlog::info)方便但不够灵活;实际项目推荐显式创建 logger 对象,便于隔离、复用和配置:

立即学习C++免费学习笔记(深入)”;

  • 控制台 loggerauto console = spdlog::stdout_logger_mt("console");
  • 文件 loggerauto file = spdlog::basic_logger_mt("file", "logs/app.log");
  • 滚动文件 logger(按大小)auto rotating = spdlog::rotating_logger_mt("rotating", "logs/rotating.txt", 1048576, 5);(单文件最大 1MB,最多保留 5 个旧文件)
  • 每日分割 loggerauto daily = spdlog::daily_logger_mt("daily", "logs/daily.txt", 2, 30);(每天 2:30 自动切分)

自定义格式、级别与线程安全

spdlog 默认格式为 [HH:MM:SS] [level] message,可通过 set_pattern() 修改:

GPTBots
GPTBots

企业级AI智能体构建平台

下载
auto logger = spdlog::stdout_logger_mt("my_logger");
logger->set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%n] [%^%l%$] %v"); 
// 输出示例:[2024-05-20 14:22:03.123] [my_logger] [INFO] Hello

日志级别从低到高:trace 。可全局设置最低输出级别:

  • spdlog::set_level(spdlog::level::debug);(影响所有 logger)
  • logger->set_level(spdlog::level::warn);(仅该 logger)

所有 _mt(multi-thread)版本 logger 内置线程安全,无需额外加锁;若确定单线程环境,可用 _st 版本稍提性能。

进阶技巧:异步日志、自定义 sink 与错误处理

高频写日志时,同步 I/O 可能阻塞主线程。启用异步模式:

auto async_file = spdlog::basic_logger_mt("async", "logs/async.log");
// 注意:程序退出前需调用 spdlog::shutdown() 刷盘

如需输出到网络、数据库或自定义设备,可继承 spdlog::sinks::sink 实现自己的 sink;常见需求已有社区实现(如 spdlog-sinks-kafka)。

错误处理建议:

  • 初始化失败时,spdlog 会抛出 spdlog::spdlog_ex 异常,应捕获并 fallback 到 stderr 或静默处理
  • 避免在 signal handler(如 SIGSEGV)中直接调用 spdlog,因其内部可能 malloc;可改用 spdlog::default_logger_raw() 的 lock-free 分支(需编译时定义 SPDLOG_COMPILED_LIB 并链接 lib)

相关专题

更多
kafka消费者组有什么作用
kafka消费者组有什么作用

kafka消费者组的作用:1、负载均衡;2、容错性;3、广播模式;4、灵活性;5、自动故障转移和领导者选举;6、动态扩展性;7、顺序保证;8、数据压缩;9、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

166

2024.01.12

kafka消费组的作用是什么
kafka消费组的作用是什么

kafka消费组的作用:1、负载均衡;2、容错性;3、灵活性;4、高可用性;5、扩展性;6、顺序保证;7、数据压缩;8、事务性支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

149

2024.02.23

rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

199

2024.02.23

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

271

2023.10.25

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

476

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

141

2025.12.24

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

141

2025.12.24

免费看漫画app合集_2026免费漫画app排行榜入口
免费看漫画app合集_2026免费漫画app排行榜入口

2026年免费漫画APP合集来啦!为你精心整理最新免费漫画APP排行榜入口,涵盖漫蛙漫画、香香漫画、包子漫画等热门神器,海量正版国漫、日漫、韩漫资源全免费阅读,无需付费解锁章节!高清全彩画质、每日极速更新,支持离线下载、智能推荐、条漫阅读模式,热血、恋爱、悬疑、古风、搞笑等题材应有尽有。无论你是追新番老粉还是小白漫迷,这里都能让你一站式追漫到爽,告别广告干扰和会员套路!赶紧点击入口下载体验,开启2026无限免费漫画之旅吧!

14

2026.01.07

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.5万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号