C++项目实战——基于多设计模式下的同步&异步日志系统-④-日志系统框架设计

文章目录

专栏导读

🌸作者简介:花想云,在读本科生一枚,C/C++领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人...致力于 C/C++、Linux 学习。

🌸专栏简介:本文收录于 C++项目------基于多设计模式下的同步与异步日志系统

🌸相关专栏推荐:C语言初阶系列C语言进阶系列C++系列数据结构与算法Linux

本项目实现的是一个多日志器日志系统,主要实现的功能是让程序员能够轻松的将程序运行日志信息落地到指定位置,且支持同步与异步两种方式的日志落地方式。

项目的框架设计将项目分为以下几个模块来实现。

(具体模块在代码实现中详细讲解)

模块划分

日志等级模块

  • 对输出日志的等级进行划分,以便于控制日志的输出,并提供等级枚举转字符串的功能

日志消息分为以下等级:

  • OFF:关闭;
  • DEBUG:调式,调试时的关键信息输出;
  • INFO:提示,普通的提示性日志信息;
  • WARN:警告,不影响运行,但是需要注意的日志;
  • ERROR:错误,程序运行时出现错误的日志;
  • FATAL:致命,一般是代码导致程序无法正常运行的日志。

日志消息模块

  • 中间存储日志输出所需的各项要素信息
    • 时间:描述本条日志输出的时间;
    • 线程ID:描述本条日志是哪一个线程输出的;
    • 日志等级:描述本条日志的等级;
    • 日志文件名:描述本条日志在哪一个源码文件中输出的;
    • 日志行号:描述本条日志在源码文件的哪一行输出的;
    • 日志数据:本条日志的有效数据载荷。

日志消息格式化模块

  • 设置日志输出格式,并提供对日志消息格式化的功能。

  • 系统的默认日志输出格式[%d{%H:%M:%S}][%t][%c][%f:%l][%p]%T%m%n

    • %d 表示日期,包含子格式 {%H:%M:%S}
    • %t 表示线程ID;
    • %c 表示日志器名称;
    • %f 表示源码文件名;
    • %l 表示源码行号;
    • %p 表示日志级别;
    • %m 表示主体消息;
    • %n 表示换行;
  • 设计思想:设计不同的子类,不同的子类从日志消息中取出不同的数据进行处理。

日志消息落地模块

  • 决定了日志消息的落地方向(即输出位置),可以是标准输出。也可以是日志文件,也可以是滚动文件进行输出。
    • 标准输出:表示将日志信息进行标准输出打印;
    • 日志文件输出:表示将日志写入指定文件末尾;
    • 滚动文件输出:当前以文件大小进行控制,当一个日志文件大小达到指定大小,则切换下一个文件进行输出;
  • 后期,也可以拓展远程日志输出,创建客户端将日志消息发送到远程的的日志分析服务器;
  • 设计思想:设计不同的子类,不同的子类控制不同的日志落地方向。

日志器模块

  • 此模块是对以上几个模块的整合,用户通过日志器进行日志的输出,有效降低用户的使用难度。
  • 此模块包含有:日志消息落地模块对象,日志消息格式化模块对象,日志输出等级。

日志器管理模块

  • 为了降低项目开发的耦合,不同的项目组可以有可以有自己的日志器来控制输出格式以及落地方向,因此本项目是一个多日志器的日志系统。
  • 管理模块就是对创建的所有日志器进行统一的管理。并提供一个默认日志器提供标准输出的日志输出。

异步线程模块

  • 实现对日志的异步输出功能,用户只需要将输出的日志任务放入任务池,异步线程负责日志的落地输出功能,以此提供更加高效的非阻塞日志输出。

模块关系图


相关推荐
诚丞成17 分钟前
计算世界之安生:C++继承的文水和智慧(上)
开发语言·c++
东风吹柳1 小时前
观察者模式(sigslot in C++)
c++·观察者模式·信号槽·sigslot
A懿轩A1 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
思忖小下2 小时前
梳理你的思路(从OOP到架构设计)_简介设计模式
设计模式·架构·eit
大胆飞猪2 小时前
C++9--前置++和后置++重载,const,日期类的实现(对前几篇知识点的应用)
c++
1 9 J3 小时前
数据结构 C/C++(实验五:图)
c语言·数据结构·c++·学习·算法
夕泠爱吃糖3 小时前
C++中如何实现序列化和反序列化?
服务器·数据库·c++
长潇若雪3 小时前
《类和对象:基础原理全解析(上篇)》
开发语言·c++·经验分享·类和对象
liyinuo20174 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范
染指11105 小时前
50.第二阶段x86游戏实战2-lua获取本地寻路,跨地图寻路和获取当前地图id
c++·windows·lua·游戏安全·反游戏外挂·游戏逆向·luastudio