常见C++ 开源日志库的比较

简介: 常见C++ 开源日志库的比较

常见的开源的C++ log库基本比较

特性/库

spdlog

glog

log4cplus

配置文件灵活度

支持通过代码配置,不依赖于外部文件配置。

需要通过命令行参数或环境变量配置。

支持通过外部配置文件灵活配置。

接口扩展性

提供丰富的API,易于扩展。

提供基础的日志记录功能,扩展性一般。

提供可扩展的接口和插件机制。

定制化程度

支持高度定制化,自定义日志格式和筛选机制。

支持基本的日志格式定制。

提供高度定制化的日志格式和筛选机制。

日志机制

高效的异步日志记录机制。

同步日志记录,性能较高。

支持同步和异步日志记录。

特有优势

轻量,高性能,支持多种日志输出方式。

错误时有堆栈输出功能,简单易用,适合Google系的项目。

功能全面,适合需要详细日志配置的大型项目。

日志相关的规则

特性/库

spdlog

glog

log4cplus

输出规则

支持多种日志接收器,包括文件、控制台等。

默认输出到控制台,可以配置为文件输出。

支持多种输出目的地,包括文件、控制台等。

默认输出格式

日期、时间、日志级别和消息内容。

时间戳、日志级别、线程ID、文件名和行号。

日期、时间、日志级别、线程ID和消息内容。

生成规则

支持自动日志轮转,基于文件大小或时间。

支持基于时间的日志轮转。

支持基于文件大小和时间的日志轮转。

清理规则

可配置最大文件数量,超过则自动删除旧文件。

通常需要手动管理旧文件,或使用外部脚本。

支持配置最大备份文件数量,自动删除旧文件。

前缀规则

可以自定义,无默认前缀。

通常包括日志级别的缩写。

可以自定义,无默认前缀。

文件名规则

可以自定义,无默认规则。

默认包括程序名、主机名、用户名和时间戳。

可以自定义,无默认规则。

开源日志库底层打印原理

  1. spdlog
  1. 底层打印原理spdlog 使用了高效的缓冲机制,它利用了C++11的特性,如模板、lambda表达式和移动语义来提高性能。此外,spdlog 支持同步和异步日志记录,其中异步记录通过使用环形缓冲区和专用的日志记录线程来实现。
  1. glog
  1. 底层打印原理glog,也就是Google Logging Library,主要使用了同步日志记录方式。它直接将日志消息写入到磁盘或其他输出流中。glog 更注重简单和直接的实现,不像 spdlog 那样提供广泛的性能优化选项。
  1. log4cplus
  1. 底层打印原理log4cplus 是基于经典的 log4j 框架的C++实现。它提供了同步和异步日志记录机制。在异步模式下,log4cplus 使用队列和工作线程来处理日志消息,从而减少了对主执行线程的影响。

结论

  • Glog 限制性比较大,日志生成规则、清理规则、输出格式规则 都不太友好,同时不支持异步。
  • spdlog比较轻量,同时性能较高。相对来说需要更多的二次封装工作。
  • 需要定制配置文件。
  • 需要自定义筛选器来实现自定义筛选机制。
  • 需要自定义输出器来实现自定义输出格式。
  • log4cplus的配置文件支持直接修改自定义的输出格式,支持自定义的筛选机制,但是只能在内定的规则内(通常是够用的)。
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
5月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
1253 2
|
5月前
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
C++STL底层原理:探秘标准模板库的内部机制
|
5月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
248 11
|
5月前
|
IDE 编译器 开发工具
msvcp100.dll,msvcp120.dll,msvcp140.dll,Microsoft Visual C++ 2015 Redistributable,Visual C++ 运行库安装
MSVC是Windows下C/C++开发核心工具,集成编译器、链接器与调试器,配合Visual Studio使用。其运行时库(如msvcp140.dll)为程序提供基础函数支持,常因缺失导致软件无法运行。通过安装对应版本的Microsoft Visual C++ Redistributable可解决此类问题,广泛应用于桌面软件、游戏及系统级开发。
716 2
|
6月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
203 4
|
6月前
|
并行计算 C++ Windows
|
8月前
高性能网络库设计之日志组件
高性能网络库设计之日志组件
244 2
|
JSON C++ 数据格式
C++20 高性能基础库--兰亭集库助力开发者构建高性能应用
这次分享的主题是《高性能基础库--兰亭集库助力开发者构建高性能应用》的实践经验。主要分为三个部分: 1. 业务背景 2. 雅兰亭库架构 3. 业务优化
502 9
|
JSON API Go
基于责任链与策略模式的轻量级PHP日志库设计
项目日志乱成一团,bug 时好时坏,服务器问题难以复现?我写了个 PHP 日志系统,第一时间发现问题,避免跑路。实现了责任链模式+策略模式,让日志存储更灵活,支持多种输出方式。