【4】基于多设计模式下的同步异步日志系统-框架设计

7. 日志系统框架设计

本项⽬实现的是⼀个多日志器日志系统,主要实现的功能是让程序员能够轻松的将程序运行日志信息落地到指定的位置,且⽀持同步与异步两种方式的日志落地方式。
项目的框架设计将项目分为以下几个模块来实现。
日志等级模块

日志等级模块:对输出日志的等级进⾏划分,以便于控制日志的输出,并提供等级枚举转字符串功能。
◦ OFF:关闭
◦ DEBUG:调试,调试时的关键信息输出。
◦ INFO:提⽰,普通的提⽰型⽇志信息。
◦ WARN:警告,不影响运⾏,但是需要注意⼀下的⽇志。
◦ ERROR:错误,程序运⾏出现错误的⽇志
◦ FATAL:致命,⼀般是代码异常导致程序⽆法继续推进运⾏的⽇志

日志消息模块

⽇志消息模块:中间存储⽇志输出所需的各项要素信息
◦ 时间:描述本条⽇志的输出时间。
◦ 线程ID:描述本条⽇志是哪个线程输出的。
◦ ⽇志等级:描述本条⽇志的等级。
◦ ⽇志数据:本条⽇志的有效载荷数据。
◦ ⽇志⽂件名:描述本条⽇志在哪个源码⽂件中输出的。
◦ ⽇志⾏号:描述本条⽇志在源码⽂件的哪⼀⾏输出的。

日志消息格式化模块

⽇志消息格式化模块:设置⽇志输出格式,并提供对⽇志消息进⾏格式化功能。
◦ 系统的默认⽇志输出格式:%d{%H:%M:%S}%T[%t]%T[%p]%T[%c]%T%f:%l%T%m%n
◦ -> 13:26:32 [2343223321] [FATAL] [root] main.c:76 套接字创建失败\n
◦ %d{%H:%M:%S}:表⽰⽇期时间,花括号中的内容表⽰⽇期时间的格式。
◦ %T:表⽰制表符缩进。
◦ %t:表⽰线程ID
◦ %p:表⽰⽇志级别
◦ %c:表⽰⽇志器名称,不同的开发组可以创建⾃⼰的⽇志器进⾏⽇志输出,⼩组之间互不影响。
◦ %f:表⽰⽇志输出时的源代码⽂件名。
◦ %l:表⽰⽇志输出时的源代码⾏号。
◦ %m:表⽰给与的⽇志有效载荷数据
◦ %n:表⽰换⾏
◦ 设计思想:设计不同的⼦类,不同的⼦类从⽇志消息中取出不同的数据进⾏处理。

日志消息落地模块

日志消息落地模块:决定了⽇志的落地⽅向,可以是标准输出,也可以是⽇志⽂件,也可以滚动⽂件输出…
◦ 标准输出:表⽰将⽇志进⾏标准输出的打印。
◦ ⽇志⽂件输出:表⽰将⽇志写⼊指定的⽂件末尾。
◦ 滚动⽂件输出:当前以⽂件⼤⼩进⾏控制,当⼀个⽇志⽂件⼤⼩达到指定⼤⼩,则切换下⼀个⽂件进⾏输出
◦ 后期,也可以扩展远程⽇志输出,创建客⼾端,将⽇志消息发送给远程的⽇志分析服务器。
◦ 设计思想:设计不同的⼦类,不同的⼦类控制不同的⽇志落地⽅向。

日志器模块

◦ 此模块是对以上⼏个模块的整合模块,⽤⼾通过⽇志器进⾏⽇志的输出,有效降低⽤⼾的使⽤难度。
◦ 包含有:⽇志消息落地模块对象,⽇志消息格式化模块对象,⽇志输出等级

日志器管理模块

◦ 为了降低项⽬开发的⽇志耦合,不同的项⽬组可以有⾃⼰的⽇志器来控制输出格式以及落地⽅向,因此本项⽬是⼀个多⽇志器的⽇志系统。
◦ 管理模块就是对创建的所有⽇志器进⾏统⼀管理。并提供⼀个默认⽇志器提供标准输出的⽇志输出。

异步线程模块

实现对⽇志的异步输出功能,⽤⼾只需要将输出⽇志任务放⼊任务池,异步线程负责⽇志的落地输出功能,以此提供更加⾼效的⾮阻塞⽇志输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何进行卷积特征可视化

大家好啊,我是董董灿。 之前写过很多关于卷积算法的文章:5分钟理解什么是卷积的特征提取。总的来说,卷积算法的本质是一个特征提取器。 那么既然卷积神经网络在图像分类、图像检测、图像分割以及其他领域有这么好的表现,卷积到底…

苍穹外卖--销量排名Top10

销量排名Top10 需求分析和设计 产品原型 所谓销量排名,销量指的是商品销售的数量。项目当中的商品主要包含两类:一个是套餐,一个是菜品,所以销量排名其实指的就是菜品和套餐销售的数量排名。通过柱形图来展示销量排名&#xff…

【动手学深度学习】(六)权重衰退

文章目录 一、理论知识二、代码实现2.1从零开始实现2.2简洁实现 【相关总结】 主要解决过拟合 一、理论知识 1、使用均方范数作为硬性限制(不常用) 通过限制参数值的选择范围来控制模型容量 通常不限制偏移b 小的意味着更强的正则项 使用均方范数作为柔…

多项式拟合求解

目录 简介 基本原理 例1 例2 例3 参考资料 简介 多项式拟合可以用最小二乘求解,不管是一元高阶函数,还是多元多项式函数,还是二者的混合,都可以通过统一的方法求解。当然除了最小二乘法,还是其他方法可以求解&…

极兔速递查询,极兔速递单号查询,根据更新量筛选出来需要的单号

批量查询极兔速递单号的物流信息,并根据物流更新量将需要的单号筛选出来。 所需工具: 一个【快递批量查询高手】软件 极兔速递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,第一次使用的伙伴记得先注册&…

express搭建后台node接口

在前端的学习中我们使用express来开发接口结合mysql,然后使用可视化的数据库工具来操作数据, web框架是express 文档是jsdoc swagger 数据库模型是sequelize 部署使用PM2来上服务器, 打包你也可以结合webpack配置target node状态 当然你也可以…

糟了,数据库崩了,又好像没崩

前言 2023 年某一天周末,新手程序员小明因为领导安排的一个活来到公司加班,小明三下五除二,按照领导要求写了一个跑批的数据落库任务在测试环境执行 ,突然间公司停电了,小明大惊,“糟了,MySQL …

cc-product-waterfall仿天猫、淘宝购物车店铺商品列表组件

cc-product-waterfall仿天猫、淘宝购物车店铺商品列表组件 引言 在电商应用中,购物车体验的优化对于提升用户满意度和转化率至关重要。在本文中,我们将深入探讨如何使用cc-product-waterfall组件,结合uni-number-box和xg-widget,…

【Linux】统计文件数量:ls -l | grep ^- | wc -l

统计文件数量:ls -l | grep ^- | wc -l ✅ 查看某文件夹下 文件 的个数(不包含子目录中的文件)(因为目录的权限首字母为 d:代表文件夹) ls -l | grep ^- | wc -lls -l:列出当前目录下所有文件&…

frida - 4.hook结合python调用

使用Python注入Frida主要有以下几种模式: Spawn 模式:在目标设备上启动一个新的应用程序进程,并在该进程中运行Frida脚本。这种模式 非常适用于对未安装的应用程序进行注入。 Attach 模式:在目标设备上附加到已经运行的应用程序进程,并在该进程中运行Frida脚本。这种 模式非常…

C++-如何避免内存泄漏

目录 一.内存泄漏 1.什么是内存泄漏,内存泄漏的危害 2.内存泄漏分类 3.如何检测内存泄漏 4.如何避免内存泄漏 一.内存泄漏 1.什么是内存泄漏,内存泄漏的危害 什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存…

速速收藏!纯C实现的MD5哈希校验算法~!

速速收藏!纯C实现的MD5哈希校验算法~! 只有一个函数: void MD5(const void* buf, unsigned int len, unsigned char output[16]); 在线验证网站:https://www.sojson.com/md5/ 头文件 /*** \file md5.h** \brief MD5 message dig…

软著项目推荐 深度学习手势识别算法实现 - opencv python

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(二)

一、数据控制语言(DCL) 1.1 授权(GRANT) 数据控制语言(DCL)是SQL的一个子集,用于控制数据库中的数据访问和权限。GRANT语句是DCL中的一种,用于向用户或角色授予特定的数据库操作权…

计算机网络 | 物理层下 传输媒介、信道复用技术,带宽接入技术

文章目录 3. 物理层下面的传输媒介3.1 导引型传输媒介3.2 非导引型传输媒介 4 信道复用技术5 数字传输系统5.1 旧的数字系统5.2 新数字系统 6 带宽接入技术6.1 DSL(数字用户线)6.2HFC 光纤同轴混合网6.2.1 接入 6.3 FTTx技术 3. 物理层下面的传输媒介 传…

层规范化(Layer Normalization)和正则化(Regularization)

层规范化(Layer Normalization)和正则化(Regularization)是两个不同的概念,尽管它们都在机器学习和深度学习中非常重要,但它们的目的和应用方式有所不同。 层规范化(Layer Normalization&#x…

KALI LINUX攻击与渗透测试

预计更新 第一章 入门 1.1 什么是Kali Linux? 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 …

嵌入式软件开发常用的关键字和运算符

目录 1、volatile关键字 2、const关键字 3、static关键字 4、struct与union 5、预定义标识符 6、#与## 7、void 与 void*关键字 8、weak关键字 1、volatile关键字 volatile是一个特征修饰符,提醒编译器它后面所定义的变量随时都有可能改变,因此…

FL Studio 21.2.1.3859中文破解激活版2024免费下载安装图文教程

FL Studio 21.2.1.3859中文破解激活版是我见过更新迭代最快的宿主软件,没有之一。FL Studio12、FL Studio20、FL Studio21等等。有时甚至我刚刚下载好了最新版本,熟悉了新版本一些好用的操作,Fl Studio就又推出了更新的版本,而且F…

WebGL笔记:矩阵平移的数学原理和实现

矩阵平移的数学原理 让向量OA位移 x方向&#xff0c;txy方向&#xff0c;tyz方向&#xff0c;tz 最终得到向量OB 矩阵平移的应用 再比如我要让顶点的x移动0.1&#xff0c;y移动0.2&#xff0c;z移动0.3 1 &#xff09;顶点着色器核心代码 <script id"vertexShader&…