现代 C++20 实战高手课
卢誉声
Autodesk 首席工程师
3781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
现代 C++20 实战高手课
15
15
1.0x
00:00/00:00
登录|注册

15|Formatting实战:如何构建一个数据流处理实例?

你好,我是卢誉声。
C++20 为我们带来了重要的文本格式化标准库支持。通过 Formatting 库和 formatter 类型,我们可以实现高度灵活的文本格式化方案。那么,我们该如何在实际工程项目中使用它呢?
日志输出在实际工程项目中是一个常见需求,无论是运行过程记录,还是错误记录与异常跟踪,都需要用到日志。
在这一讲中,我们会基于新标准实现一个日志库。你可以重点关注特化 formatter 类型的方法,实现高度灵活的标准化定制。
好,话不多说,我们就从架构设计开始,一步步实现这个日志库(课程配套代码可以从这里获取)。

日志库架构设计

事实上,实现一个足够灵活的日志库并不容易。在实际工程项目中,日志输出不仅需要支持自定义日志的输出格式,还需要支持不同的输出目标。比如,输出到控制台、文件,甚至是网络流或者数据库等。
Python 和 Java 这类现代语言都有成熟的日志库与标准接口。C++ Formatting 的正式提出,让我们能使用简洁的方式实现日志库。
同时,Python 的 logging 模块设计比较优雅。因此,我们参照它的架构,设计了基于 C++20 的日志架构。
项目的模块图是后面这样。
对照图片可以看到,logging 模块是工程的核心,包含核心框架、handlers 和 formatters 三个子模块。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

C++20的Formatting库和formatter类型构建了一个灵活的数据流处理实例,以实现一个日志库为例,详细讲解了日志库的架构设计和日志格式化器模块的实现。日志库架构设计部分指出实现一个灵活的日志库并不容易,因为日志输出需要支持自定义格式和不同的输出目标。作者参照Python的logging模块设计,设计了基于C++20的日志架构,包括核心框架、handlers和formatters三个子模块。在日志格式化器模块部分,作者介绍了三种不同的日志格式化器:CFormatter、StreamFormatter和ModernFormatter。其中,ModernFormatter基于C++20的Formatting库和特化formatter实现,具有简单清晰的时间格式化、避免缓冲区溢出以及自动确定格式化参数类型等优点。文章通过实际案例向读者展示了如何利用C++20的Formatting库和formatter类型构建一个灵活的数据流处理实例,为读者提供了实用的技术指导和参考。 文章通过介绍C++20的Formatting库和formatter类型构建了一个灵活的数据流处理实例,以实现一个日志库为例,详细讲解了日志库的架构设计和日志格式化器模块的实现。日志库架构设计部分指出实现一个灵活的日志库并不容易,因为日志输出需要支持自定义格式和不同的输出目标。作者参照Python的logging模块设计,设计了基于C++20的日志架构,包括核心框架、handlers和formatters三个子模块。在日志格式化器模块部分,作者介绍了三种不同的日志格式化器:CFormatter、StreamFormatter和ModernFormatter。其中,ModernFormatter基于C++20的Formatting库和特化formatter实现,具有简单清晰的时间格式化、避免缓冲区溢出以及自动确定格式化参数类型等优点。文章通过实际案例向读者展示了如何利用C++20的Formatting库和formatter类型构建一个灵活的数据流处理实例,为读者提供了实用的技术指导和参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《现代 C++20 实战高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • 李云龙
    不仅学到了format,还在老师的项目代码中学到了不同风格的时间处理

    作者回复: 比心

    2024-01-17归属地:北京
    1
  • peter
    StreamHandler的“流”是否包含File?甚至包含标准输出流? 我目前的理解是:标准输出流就是控制台;“流”一般包括文件输出流、网络输出流,好像没有别的了。

    作者回复: 理论上StreamHandler可以包含所有的流,包括标准输出/错误流、文件输出流甚至字符串流。我们这里单独设计FileHandler的原因是,在实际项目中使用文件记录日志时,经常会涉及到日志文件大小控制、日志文件分割、自动归档等常见需求,这种情况下必须用单独的FileHandler(需要有更多的配置参数),不能直接使用StreamHandler。

    2023-02-25归属地:北京
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部