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
表示换行;
-
设计思想:设计不同的子类,不同的子类从日志消息中取出不同的数据进行处理。
日志消息落地模块
- 决定了日志消息的落地方向(即输出位置),可以是标准输出。也可以是日志文件,也可以是滚动文件进行输出。
标准输出
:表示将日志信息进行标准输出打印;日志文件输出
:表示将日志写入指定文件末尾;滚动文件输出
:当前以文件大小进行控制,当一个日志文件大小达到指定大小,则切换下一个文件进行输出;
- 后期,也可以拓展远程日志输出,创建客户端将日志消息发送到远程的的日志分析服务器;
- 设计思想:设计不同的子类,不同的子类控制不同的日志落地方向。
日志器模块
- 此模块是对以上几个模块的整合,用户通过日志器进行日志的输出,有效降低用户的使用难度。
- 此模块包含有:日志消息落地模块对象,日志消息格式化模块对象,日志输出等级。
日志器管理模块
- 为了降低项目开发的耦合,不同的项目组可以有可以有自己的日志器来控制输出格式以及落地方向,因此本项目是一个多日志器的日志系统。
- 管理模块就是对创建的所有日志器进行统一的管理。并提供一个默认日志器提供标准输出的日志输出。
异步线程模块
- 实现对日志的异步输出功能,用户只需要将输出的日志任务放入任务池,异步线程负责日志的落地输出功能,以此提供更加高效的非阻塞日志输出。
模块关系图
相关文章:

C++项目实战——基于多设计模式下的同步异步日志系统-④-日志系统框架设计
文章目录 专栏导读模块划分日志等级模块日志消息模块日志消息格式化模块日志消息落地模块日志器模块日志器管理模块异步线程模块 模块关系图 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导…...

计算机专业毕业设计项目推荐02-个人医疗系统(Java+原生Js+Mysql)
个人医疗系统(Java原生JsMysql) **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以…...

Nginx__高级进阶篇之LNMP动态网站环境部署
动态网站和LNMP(LinuxNginxMySQLPHP)都是用于建立和运行 web 应用程序的技术。 动态网站是通过服务器端脚本语言(如 PHP、Python、Ruby等)动态生成网页内容的网站。通过这种方式,动态网站可以根据用户的不同请求生成不…...

Zebec 生态 AMA 回顾:Nautilus 以及 $ZBC 的未来
在9月7日,Zebec创始人Sam做客社区,并进行了“Nautilus Chain以及$ZBC的未来”主题的AMA访谈。Sam在本次访谈中对Nautilus Chain生态的价值捕获、Zebec生态布局规划、可能会推出的Nautilus Chain治理通证NAUT进行了解读。本文将对本次AMA进行回顾与总结。…...
NXP iMX8MM 修改 UART4至 Cortex-A53 核心
By Toradex秦海 1). 简介 NXP iMX8MM SoC UART-4 接口在默认的 ATF(ARM Trusted Firmware) 中被 RDC 分配给了 Cortex-M4 核心,用作 M4 核心的 Debug UART。如果这时候在 Cortex-A53 核心 Linux Devcie-tree 配置中使能 UART-4,就会出现 Kernel Oops 错…...

C#控制台程序中使用log4.net来输出日志
Apache log4net 库是一个帮助程序员将日志语句输出到各种输出目标的工具。log4net 是优秀的 Apache log4j™ 框架到 Microsoft .NET 运行时的端口。 我喜欢他可以自定义输出,区分等级等特点。 导入库 我们在工程里添加NuGet的包。输入名称log4net ࿰…...

用GPT干的18件事,能够真正提高学习生产力,建议收藏
用GPT干的18件事,能够真正提高学习生产力,建议收藏。 语法更正 文本翻译 语言转换 代码解释 修复代码错误 作为百科全书 信息提取 好友聊天 创意生成器 采访问题 论文大纲 故事创作 问题类比 创建 SQL 需求 情感分析 将产品描述转变为广告 关键字提取 闲…...

线性代数的本质(二)——线性变换与矩阵
文章目录 线性变换与矩阵线性变换与二阶方阵常见的线性变换复合变换与矩阵乘法矩阵的定义列空间与基矩阵的秩逆变换与逆矩阵 线性变换与矩阵 线性变换与二阶方阵 本节从二维平面出发学习线性代数。通常选用平面坐标系 O x y Oxy Oxy ,基向量为 i , j \mathbf i,…...
JavaScript获取字符串的字节长度
概要 提示:大家都知道,获取字符串的长度可用length来获取。 那么获取这段字符串的字节数呢?英文字母肯定lenght和字节数都一样:都是1而中文lenght1,字节数2因此,需要作的就是把中文字符的字节数计算出来。 …...
[2023.09.13]: Rust Lang,避不开的所有权问题
Rust的所有权问题,在我学Rust的时候就跳过了,因为我知道这玩意儿没有场景就不好理解。没想到场景很快就出现了。 在开发Yew应用组件的时候,涉及到了事件,闭包,自然就引出了所有权问题。 话不多说,下面让我们…...

Redux中间件源码解析与实现
基本介绍 本文中涉及到的关键npm包的版本信息如下: react 的版本为18.2.0 redux的版本为4.1.2 redux-thunk版本为2.4.2 redux-promise版本为0.6.0 redux-logger版本为3.0.6 在Redux源码解析与实现(一)Redux源码解析与实现(二&…...

关于rsync用不了之后
1.尝试找出rsync使用错误原因: 我遇见一个问题:rsync:read errors mapping:communication error on send (70),我查了一下这个问题很大可能是网络链接导致的,然后我用nslookup指令查看了/train2…...
由一个多线程并发保存而引发的思考
1. 问题描述 问题描述,现A表(用户查看实验的次数)有user_id和exp_id两个字段,其中user_id加exp_id不唯一。B表有user_id,exp_id以及exp_num三个字段,其中user_id加exp_id唯一(表中未建唯一索引)。 现需要将A表的数据同步到B表,单机模式通过定时任务同步。A表的数据有…...
python-vlc
文章目录 关于 python-vlc安装使用关于 python-vlc Python vlc bindings github : https://github.com/oaubert/python-vlcPython bindings (ctypes-based) for VLC http://olivieraubert.net/vlc/python-ctypes/关于 VLC 可参考 macOS - 安装使用 VLC https://blog.csdn.net/…...

2023长城杯 web部分题目(seekingeasy_extension)
seeking 下载题目附件得到: <?php error_reporting(0); header("HINT:POST n range(1,10)");$image $_GET[image]; echo "这里什么也没有,或许吧。"; $allow range(1, 10); shuffle($allow); if (($_POST[n] $allow[0])) …...

2-1 张量数据结构
张量概念 张量是什么? 单个元素叫标量(scalar),一个序列叫向量(vector),多个序列组成的平面叫矩阵(matrix),多个平面组成的立方体叫张量(tensor&…...
QSqlQuery查询语句
SqlQuery 封装了在 QSqlDatabase 上执行的 SQL 查询中创建、导航和检索数据所涉及的功能。 可用于执行 DML(数据操作语言)语句,如 SELECT、INSERT、UPDATE 和 DELETE, 以及 DDL(数据定义语言)语句ÿ…...

用c语言编写出三底模型
以下是一个用C语言实现三底模型的示例代码。这个程序通过循环遍历输入的股票数据,判断是否出现三底形态,如果是,则输出买入信号,否则输出卖出信号。 c语言 #include <stdio.h> #include <stdlib.h> // 判断是否出现…...
15 Python使用MySQL
概述 在上一节,我们介绍了如何在Python中使用网络,包括:套接字编程、socketserver等内容。在这一节,我们将介绍如何在Python中使用MySQL。MySQL是最流行的关系型数据库管理系统之一,由瑞典MySQL AB公司开发,…...
3、Nginx 常用的命令和配置文件
文章目录 3、nginx 常用的命令和配置文件3.1 nginx 常用的命令:3.2 nginx.conf 配置文件3.2.1 地址3.2.2 内容3.2.2 vim不正常退出后再次打开信息提示解决方法 3.3 第一部分:全局块3.4 第二部分:events 块3.4 第三部分:http 块①、…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...