c++日志库性能对比 日志管理系统操作方法

程序跑着跑着出错了,自然就要去看日志文件,研究研究是哪里出错了。同时,记录日志也不能太慢了,速度总是十分重要的。Spdlog,也就是 Speed Log 的缩写,这个连名字都带着速度的 C++ 日志库,应该会让你满意。当程序运行出错时,自然要查看日志文件,研究哪里出错了。同时,...

程序跑着跑着出错了,自然就要去看日志文件,研究研究是哪里出错了。同时,记录日志也不能太慢了,速度总是十分重要的。Spdlog,也就是 Speed Log 的缩写,这个连名字都带着速度的 C++ 日志库,应该会让你满意。

当程序运行出错时,自然要查看日志文件,研究哪里出错了。同时,记录不能太慢。速度永远是非常重要的。Dlog,是Speed Log的缩写,是一个名字中带有Speed的C++日志库,应该能满足你。

C++

简介

Spdlog,是在 Github 上由 gabime 开源的 C++ 日志库,代码仓在
https://github.com/gabime/spdlog,目前版本为 1.6.1。Spdlog 以速度著称,且是 Header-Only 的,使用方便,兼容多个平台。Spdlog 还具有:格式化、异步模式、单线程/多线程、丰富的日志输出目标、运行时日志级别修改、Backtrace记录等,功能丰富,可以满足绝大多数场景的需求。

Splog,这是Github上的gabime开源的C++日志库。代码仓库位于
https://github.com/gabi Me/SPD log。当前版本是1.6.1。Spdlog以其速度、仅头文件、易于使用和兼容多种平台而闻名。Spdlog还具有以下特性:格式化、异步模式、单线程/多线程、丰富的日志输出目标、运行时日志级别修改、回溯记录等。功能丰富,可以满足大部分场景的需求。

Spdlog日志库

固定

可以将源代码以仅头文件的方式***到项目的编译树中,用C++11的编译器编译。

在将spdlog链接到项目代码之前,还可以使用静态库方法来编译spdlog:

git clone https://github.com/gabime/spdlog.gitcd spdlog && mkdir build && cd buildc***ke .. && ***ke -j

Spdlog支持广泛的平台,包括:

Linux, FreeBSD, OpenBSD, Solaris, AIXWindows (msvc 2013+, cygwin)***cOS (clang 3.5+)Android

也可以通过包管理直接安装,比如Hombrew。

brew install spdlog

在Fedora上,可以用yum等。

yum install spdlog

例子

下面是Spdlog的一个基本使用示例:

#include "spdlog/spdlog.h"#include "spdlog/sinks/basic_file_sink.h"int ***in() { spdlog::info("Welcome to spdlog!"); spdlog::warn("Easy padding in numbers like {:08d}", 12); spdlog::error("Positional args are {1} {0}..", "too", "supported");}

Spdlog使用fmt库格式化日志,可以直接调用info、warn等函数,使用默认的记录器输出日志。

可以使用set_level和set_pattern函数在运行时修改日志级别和格式:

spdlog::set_level(spdlog::level::debug);spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");

Spdlog支持多种日志输出目标,包括命令行的stdout和stderr、基本文件、轮转文件、每日更新的文件、POSIX的syslog、systemd、Windows的Debug等。不同的输出目标需要包含相应的头文件,并使用相应的工厂构建函数。

Spdlog支持单线程和多线程记录器,其中多线程版本是线程安全的。单线程版本的工厂函数以_st结尾,多线程版本以_ mt结尾。

您可以使用不同的输出目标和不同线程版本的logger进行定制日志记录。诸如

#include "spdlog/sinks/rotating_file_sink.h"auto file_logger = spd::rotating_logger_mt("file_logger", "logs/mylogfile", 1048576 * 5, 3);

定义了一个多线程旋转文件的logger,名称为file_logger,输出文件路径为logs/mylogfile,最大5MB,最多保留3个文件。但是

#include "spdlog/sinks/daily_file_sink.h"auto daily_logger = spdlog::daily_logger_st("daily_logger", "logs/daily", 14, 55);

然后定义一个单线程日志记录器,每天更新文件,名称为daily_logger,输出路径为logs/daily,每天14:55新建一个日志文件。

更多

Spdlog 支持对于 Backtrace 的存储,可以在缓存记录一定数量的日志消息,并在需要时输出;spdlog::enable_backtrace(32);...spdlog::dump_backtrace();Spdlog 支持异步模式,使用预设的线程池进行异步日志记录,可以提升多线程的速度;auto async_file = spdlog::basic_logger_mt<spdlog::async_factory>("async_file_logger", "logs/async_log.txt");Spdlog支持 logger 的中心化注册,方便 logger 的引用;spdlog::register_logger(some_logger);auto logger = spdlog::get("logger1");Spdlog 性能优越,在性能测试中,进行了100万次循环测试,其中:单线程的基本文件 logger 达到每秒 5,777,626(约578万)次,平均每条消息耗时 0.17微秒,轮转文件和每日更新文件也得到了同样的性能;而在10个线程竞争同一个文件时,也能得到每秒 1,659,613(约166万)次的性能;使用10个线程的异步模式则能达到每秒 2,682,285(约268万)次。

Spdlog速度极快

摘要

Splog性能优越,功能丰富,内置支持十余种输出目标,单线程/多线程和异步,以及注册功能、回溯记录等其他便捷功能,使得Spdlog适用于大多数日志记录场景。

Spdlog采用仅头文件的方式设计,使用方便;代码格式标准,结构清晰,模块化程度高,代码质量高;完成项目测试和性能测试,完成编译支持;目前社区也比较活跃,是一个值得学习和参与的开源项目。

本文来自离开我后记得微笑投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/547863.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 05-15
下一篇 05-15

相关推荐

  • 手游渠道服和官服有什么区别 两者对比分析不同处

    通常游戏会按照苹果服、硬核服、安卓服的划分方式来划分服务器。仅仅是因为钱!比如你在苹果App Store下载的游戏充值到10元,苹果的口袋里就有3元,而你在App Store下载的游戏也会部分充值到腾讯的口袋里。同样的,如果在定位器厂商拥有的商店下载,每个品牌代扣的费用也不一

    2023-07-29 09:47:01
    830 0
  • 机械键盘各轴对比 机械键盘的四种轴体有什么区别

    这不是七夕节了吗?好不容易从男朋友那里问出他最近想要一个机械键盘,可是对于机械键盘我却是一知半解,无从下手,初印象就是个会发光的键盘而已。于是我赶快翻看各种资料,发现机械键盘的轴体是真的搞不懂,如果你也想要买机械键盘,快先来跟我一起学习学习。(图片来自网络

    2023-07-28 07:52:01
    185 0
  • 10代cpu什么时候发布,英特尔10代和9代对比区别

    据悉英特尔第十代桌面处理器计划于下月发布。之前只有10代处理器的部分规格流出网络,最近无内核显示的10代处理器信息泄露。结果十代台式机CPU的信息基本都泄露了。从相关资料来看,目前已知的有其中带字母“F”的后缀表示不检查,这样的CPU有六种,包括两个i9处理器、两个i7

    2023-07-27 10:23:01
    628 0
  • 7寸平板电脑联想怎么样 最新参数对比

    很多人不知道的是,除了电子阅读器,亚马逊还有一系列名为Kindle的设备,那就是Kindle Fire,这是亚马逊除了Kindle之外的另一款主打电子产品——平板电脑;就在前段时间,亚马逊发布了Kindle Fire 7,主打低性价比,广受好评;最近联想也发布了两款对抗Kindle Fire 7的平板电

    2023-07-27 01:25:01
    584 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信