spdlog库
1. spdlog简介
spdlog 是一个非常快速、轻量级的 C++ 日志库,旨在提供高效的日志记录功能。它的设计目标是既高效又简单,支持多种日志级别和格式化选项,并且易于集成到 C++ 项目中。
主要特点:
- 高性能:spdlog 采用了非常高效的日志记录方式,支持异步日志记录。
- 多种日志级别:它支持不同的日志级别,例如 trace, debug, info, warn, error, critical 等。
- 格式化:支持使用类似 printf 的格式化语法来定制日志的输出格式。
- 多目标输出:支持将日志输出到控制台、文件或其他输出目标。
- 异步日志:通过异步日志记录,spdlog 可以在性能要求高的环境中减少日志记录对性能的影响。
- 线程安全:支持多线程环境,可以在多个线程中安全地记录日志。
- 简单的接口:spdlog 的 API 简洁直观,易于集成和使用。
常见的日志级别:
- trace:非常详细的日志,用于开发时的调试。
- debug:调试信息,通常用于开发和测试环境。
- info:常规信息日志,用于输出系统的正常运行状态。
- warn:警告信息,表示系统的潜在问题。
- error:错误信息,表示系统出现了问题,需要注意。
- critical:严重错误,表示系统可能崩溃或无法继续运行。
1.1 spdlog下载
源 | 地址 |
---|---|
GitHub地址 | https://github.com/gabime/spdlog |
log4cplus库应用 | 深入浅出(二)log4cplus库 |
1.2 log4cplus与spdlog区别
特性 | log4cplus | spdlog |
---|---|---|
性能 | 性能较低(但支持异步) | 高性能,适合高频率日志记录 |
功能 | 丰富的功能,支持配置文件 | 简洁的功能,专注高效日志记录 |
配置方式 | 配置文件(XML, properties) | 代码配置,无配置文件支持 |
易用性 | 学习曲线较陡,功能复杂 | 易于使用,快速集成 |
线程安全 | 支持线程安全 | 支持线程安全,专为并发设计 |
跨平台 | 跨平台支持较好 | 跨平台支持较好 |
适用场景 | 适合需要灵活配置和功能丰富的项目 | 适合对性能要求高的项目 |
如何根据实际需求选择呢?
- 选择
log4cplus
:如果你需要复杂的日志管理功能(如配置文件支持、日志轮转等),并且不太担心性能瓶颈,log4cplus 会是一个不错的选择。 - 选择
spdlog
:如果你需要一个高性能的日志库,且项目的重点是性能优化(尤其是在多线程或高并发场景下),spdlog 是一个更合适的选择。
2. spdlog配置
全部代码都在项目的include文件夹下,直接引用到自己的项目里就能用。
#日志
include_directories(${Third_Libraries_DIR}/spdlog)
3. C++实际应用
3.1 基本应用
包含头文件
#include <spdlog/spdlog.h>
初始化日志
spdlog::info("Welcome to spdlog!");
spdlog::error("Some error message with arg: {}", 1);
spdlog::warn("Easy padding in numbers like {:08d}", 12);
spdlog::critical("Support for int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}", 42);
spdlog::debug("This message should be displayed..");
设置日志级别
spdlog::set_level(spdlog::level::debug); // 设置全局日志级别为 debug
spdlog::debug("This message should be displayed..");
自定义日志格式
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] [%n] %v");
spdlog::info("Custom format message");
logger::set_pattern("%^[%T] %n: %v%$"); // 自定义输出格式
logger