当前位置: 首页 > web >正文

日志项目——日志系统框架设计

1.模块划分

0x1.日志等级模块

对输出日志的等级进行划分,以便于控制日志的输出(在具体项目测试时,可以打印调试日志用来debug,而当项目上线后,就不应该在打印debug日志,而只在乎致命的错误)。并且提供了将等级枚举转换成字符串的功能。

  • DEBUG:调式,用于调式代码时输出关键信息
  • INFO:提示,普通日志的输出
  • WARNNING:警告,不影响程序运行,但是需要注意的日志
  • ERROR:错误,程序运行出错时的日志
  • FATAL:致命,一般出现就会导致程序终止,无法继续运行的日志
  • OFF:关闭

有了以上几种等级,我们便可以随心设置,当我们设置等级为OFF时,所有的日志消息都无法被打印。 

0x2.日志消息模块

在日志真正落地之前,用于存储一条日志的所有组成部分。而一条日志所包含的内容如下:

  • 时间:日志输出的时间
  • 线程ID:哪一个线程输出的该日志
  • 日志等级:该日志的类型
  • 文件名:该日志是从那个源文件中输出的
  • 行号:具体的行号
  • 日志器名称:在内存中,可能同时存在多个日志器,日志器名称是日志器的唯一标识
  • 正文:日志消息的具体内容,如套接字创建失败...

 0x3.日志消息格式化模块

设置日志的输出格式,将日志消息按照指定的输出格式,生成一个字符串,交给最后的落地模块。

默认的输出格式为:"[%d{%Y%m%d-%H:%M:%S}][%t][%c][%f:%l][%p]%T%m%n"

  • %d{%Y%m%d-%H:%M:%S}:时间,花括号内部表示时间的格式
  • %t:线程ID
  • %c:日志器名称
  • %f:%l:文件名+行号
  • %p:日志级别
  • %T:制表符
  • %m:正文
  • %n:换行

0x4.日志消息落地模块

该模块决定日志消息最后输出到什么位置,标准输出,指定文件,还是滚动文件...

滚动文件:所有的日志消息如果都输出到一个文件中,会导致该文件大小变得非常大,不利于后续的日志分析。而滚动文件则可以根据当前文件的大小来切换文件(当文件内容达到1G,就创建一个新文件,日志消息输出到该新文件中),或者根据时间来切换(每天都创建一个新的文件,日志消息都只输出到当天的日志文件中)。

0x5.日志器模块

对以上模块的整合,用户使用日志器来进行日志的输出,而不是使用上面的模块中的几个接口来实现消息落地。

日志器包含有同步日志器和异步日志器。

  • 同步日志器:业务线程自主实现日志的落地
  • 异步日志器:业务线程将日志消息放到缓冲区中,然后就做自己的事,日志的真正落地,交给异步线程去做。

0x6.日志器管理模块

对在内存中所有的日志器进行管理,同时提供获取指定日志器名称的日志器,以便日志的输出操作。

日志器模块只能由一个实例,所以该模块是一个单例模块

0x7.异步线程模块

实现异步写日志的过程,本质上就是完成将日志从缓冲区读出来,在落地的整个过程。

2.模块关系图 

http://www.xdnf.cn/news/12070.html

相关文章:

  • 卡特兰数简单介绍
  • C++初阶 | 模板
  • C#中的依赖注入Dependency Injection, DI
  • AI 如何改变软件文档生产方式?
  • 图解浏览器多进程渲染:从DNS到GPU合成的完整旅程
  • JavaScript学习笔记(五)
  • 数据预处理的几种形式(转载)
  • 如何从零开始建设一个网站?
  • 卫星在轨姿态控制技术详解:从自旋稳定到高精度闭环控制
  • Redis中的setIfAbsent方法和execute
  • #开发环境篇:postMan可以正常调通,但是浏览器里面一直报403
  • python打卡day44@浙大疏锦行
  • GAN训练困境与模型分类:损失值异常与生成判别模型差异解析
  • WES7系统深度定制全流程详解(从界面剥离到工业部署)
  • RoPE 详解:旋转位置编码的原理与实践《一》
  • 回归分析-非线性回归及岭回归.docx
  • 基于51单片机的汽车雨刮器模拟proteus仿真
  • 【Linux】Linux 环境变量
  • 408考研逐题详解:2009年第31题
  • 组合式过电压保护器安装指南
  • 第N1周:one-hot编码案例
  • 使用cursor 编辑器开发 Vue项目,配置ESlint自动修复脚本,解决代码不规范引起的报错无法运行项目问题
  • rockyLinux常用共享的服务和配置
  • JAVASE:面向对象
  • 第4章(旧)Day1 - Python小白上路
  • 路凯智行助力华润水泥长治矿区开启无人运输新场景
  • 奈氏准则/奈奎斯特定理 如何直观理解2W这个超参数,为什么偏偏就是2呢?
  • fastadmin+workman环境搭建
  • thymeleaf直接调用Spring Bean中定义的方法
  • 区块链技术在计算机信息网络综合布线实训室的应用实践