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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 常见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的配置文件支持直接修改自定义的输出格式,支持自定义的筛选机制,但是只能在内定的规则内(通常是够用的)。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
30天前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
58 6
|
13天前
|
存储 运维 监控
开源日志Graylog
【10月更文挑战第21天】
52 8
|
13天前
|
存储 数据采集 监控
开源日志Fluentd
【10月更文挑战第21天】
31 7
|
13天前
|
存储 监控 安全
|
12天前
|
存储 数据采集 监控
开源日志分析Elasticsearch
【10月更文挑战第22天】
37 5
|
12天前
|
机器学习/深度学习 运维 监控
开源日志分析Kibana
【10月更文挑战第22天】
23 3
|
12天前
|
存储 JSON 监控
开源日志分析Logstash
【10月更文挑战第22天】
26 1
|
14天前
|
存储 运维 监控
开源日志分析工具
【10月更文挑战第20天】
37 3
|
30天前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
67 5
|
30天前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
52 1