讲师中心 微信公众号
AI工具推荐 视频效率加速

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

云涛君_3475

云涛君_3475

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

|

932人浏览过

|

来源于php中文网

原创

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

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

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

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

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

  • CMake + vcpkg:vcpkg install spdlog,然后在 CMakeLists.txt 中 find_package(spdlog)
  • Conan:conan 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++免费学习笔记(深入)”;

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

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

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

ClickHouse GitHub Forensics
ClickHouse GitHub Forensics

通过ClickHouse查询GitHub事件数据,用于供应链调查、行为者画像和异常检测。适用于调查基于GitHub的攻击,...

下载
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 < debug < info < warn < error < critical < off。可全局设置最低输出级别:

  • 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<spdlog::async_factory>("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)

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

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

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

2246

2024.01.12

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

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

550

2024.02.23

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

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

524

2024.02.23

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

570

2026.02.04

scripterror怎么解决
scripterror怎么解决

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

889

2023.10.18

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

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

2400

2023.10.25

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

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

3558

2023.08.10

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

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

1029

2025.12.24

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

80

2026.09.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 7.9万人学习

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

共8课时 | 1.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn