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 块①、…...
python经典百题之兔子出生问题
这是一个经典的 Fibonacci 数列问题,可以通过递归或循环来解决。 递归方法: 由题意可知,第 n 个月的兔子数等于第 n-1 个月的兔子数加上第 n-2 个月的兔子数。设 f(n) 表示第 n 个月的兔子数,则有: f(n) f(n-1) f…...
不定积分的概念和性质
目录 原函数 不定积分 不定积分的几何意义 原函数的存在定理 不定积分的性质 不定积分是微积分的一个关键部分,它涉及到一个函数的不定积分的计算。不定积分可以理解为求一个函数的原函数,也被称为反导数。原函数是一个函数,使得该函数的…...
远程访问服务器JupyterLab的配置方法
远程访问服务器JupyterLab的配置方法 环境及工具注意 基本步骤生成密码生成并修改配置文件*错误:jupyter localhost 已拒绝连接*后台运行jupyter后台关闭 其实就是在服务器运行JupyterLab,然后在本地浏览器访问 环境及工具 服务器:Ubuntu 1…...
Java native 关键字
如你在看 JDK 的源代码的时候,大概率会看到很多方法使用了 native 关键字。 下面是 String 对象 JDK 中的源代码,就带有了一个 native 关键字。 native 是干什么用的 简单来说就是 Java 的 native 方法的实现不是用 Java 实现的,可能在其他…...
【线性代数】沉浸式线性代数在线学习网站
地址:http://immersivemath.com/ila/index.html 这是全球第一本带交互式图形的线性代数教材,作者是 J. Strm, K. strm, and T. Akenine-Mller。 全书一共十章,各章节内容如下: 接下来我将对各章节进行简单的总结,另外…...
Kotlin中特性、数据类、伴生对象、顶层函数
Kotlin中的函数参数和属性声明 在 Kotlin 中,函数参数和属性有不同的声明方式和行为。这些特性使得 Kotlin 代码更加安全、易于理解和维护。 函数参数的只读性 fun sum(a: Int, b: Int): Int {var modifiedA aif (modifiedA > 0) {modifiedA 1}//三元表达式v…...
《PostgreSQL物化视图:创建、维护与应用》
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: 📚…...
shell脚本之test命令
shell脚本之test命令 数值比较:2. 字符串比较:3. 文件测试:4. 逻辑操作:5. 其他测试: test命令在Shell脚本中用于进行条件测试和条件判断。它用于检查文件、字符串和数值的各种条件,并返回一个状态码&#…...
JAVA设计模式8:装饰模式,动态地将责任附加到对象上,扩展对象的功能
作者主页:Designer 小郑 作者简介:3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN博客专家,阿里云社区专家博主,蓝桥云课讲师。 目录 一、什么是装饰模式二、…...
Linux学习之MySQL备份
xtrabackup资源下载 完全备份与恢复 # 1.物理备份与恢复 # 冷备份,需停止数据库服务 适合线下服务器。 [rootmysql50 ~]# systemctl stop mysqld [rootmysql50 ~]# mkdir /bakdir [rootmysql50 ~]# cp -r /var/lib/mysql /bakdir/mysql.bak [rootmysql50 ~]# cd /…...
网站建设软件/百度热门
目录 GUI图形用户编程(一) Tkinter的GUI组件结构体 GUI编程的核心步骤 常用的GUI库 核心步骤和第一个GUI程序 tkinter 主窗口 GUI应用程序类的经典写法 tkinter中的Label标签常用属性 Label(标签) GUI图形用户编程&#…...
wordpress 适配/新手如何找cps推广渠道
文章目录OpenCV基础之模板匹配与直方图模板匹配直方图查看图像的三色mask掩模图像均衡直方图自适应直方图均衡化OpenCV基础之模板匹配与直方图 模板匹配 模板匹配即在一幅图像中寻找与模板图像最匹配(相似)部分的部分。简单的实例,匹配多个文件夹图案。 注意&…...
做一元云购网站/今天特大新闻
雷帝网 乐天 1月15日报道乐视网今日发布公告,宣布国泰君安拟于2018年12月27日起的90个自然日内通过司法可售冻结二级市场集中竞价交易方式,处置乐视网大股东贾跃亭质押的标的证券股份。国泰君安本次可能实施的违约处置事项,可能导致贾跃亭被动…...
给wordpress添加背景音乐/宁波seo网络推广优质团队
二元交叉熵 binary cross entropy 理解一下这个损失函数,一般来说,适用于二分类任务,但是在几个推荐系统的paper中看到了这个损失函数,先上公式: Loss−1N∑i1Nyi⋅log(p(yi))(1−y)⋅log(1−p(yi))Loss-\frac1N\…...
wordpress 支付宝付款/广告代发平台
linux就该这么学 笔记(2) RPM(Red Hat Package Manage) 红帽软件包管理器, RPM有点像windows系统中的控制面板, 会建立统一的数据库, 详细记录软件信息并能够自动建立依赖关系,它生成具有.RPM扩展名的文件…...
怎么查看网站是用什么系统做的/互联网推广是什么工作内容
背景 CentOS7默认支持zmodem协议,进行文件传输。具体可以看一看百科:ZMODEM。值得注意的是,zmodem协议不能处理超过4G的文件。 Mac brew install lrzszlrzsz是对zmodem协议实现的软件包。 iterm2-zmodem https://github.com/mmastrac/it…...