日志系统——框架设计

Logging system: 该日志系统主要实现能够高效稳定的记录程序的运行信息,帮助用户检测程序的运行状态,在产品的开发中可以帮助我们更快的定位查找问题,主要技术栈有类层次设计,多线程,双缓冲区,生产消费模型等,通过完成日志系统的开发,更进一步的提高自身的编程能力以及实战开发经验。icon-default.png?t=N7T8https://gitee.com/zcxmjw/logging-system

一,日志系统需求分析

首先我们需要明确一下,日志系统的核心功能:将一条信息,进行格式化成指定格式的字符串后写入指定的位置

由日志系统的核心功能我们发现我们写的日志系统必须要满足下面三点

1.日志要写入指定位置(标准输出,指定文件,滚动文件以及其他的例如写入数据库,服务器等),因此日志系统需要支持将消息落地到不同的位置,也就是多落地方向

2.日志写入指定位置,支持不同的写入方式(同步,异步)

  • 同步:业务线程自己负责写入。(流程简单,但可能因为阻塞导致效率低下)
  • 异步:业务线程将日志放入缓冲区,让其他异步线程负责将日志写入指定位置

3.针对日志输出专门设置一个日志器进行输出,同时我们的日志系统要支持多日志器输出(不同的场景有不同的输出策略)

二,日志系统模块划分

2.1 日志等级模块

 等级模块主要是根据信息的影响大小进行分类,通常有以下几类

  • OFF:关闭
  •  DEBUG:调试,调试时的关键信息输出。
  • INFO:提⽰,普通的提⽰型日志信息。
  • WARN:警告,不影响运⾏,但是需要注意⼀下的⽇志。
  • ERROR:错误,程序运行出现错误的⽇志
  • FATAL:致命,⼀般是代码异常导致程序⽆法继续推进运⾏的⽇志

通过对不同的日志进行不同的等级划分,我们也可以更好的控制日志的输出,例如对日志信息进行过滤,只输出WARN以上的信息。

2.2 日志消息模块

该模块主要封装一条信息所需要的各种元素,例如时间,线程id,文件名,行号,日志等级,消息主体。

2.3 消息格式化模块

按照指定的格式对日志信息关键要素进行组织,最终获得我们想要的日志信息格式进行输出,例如

系统的默认⽇志输出格式:%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:表⽰换⾏

 设计思路:设置不同的子类,不同的子类从日志消息中取出不同的数据进行处理

2.4 日志消息落地模块

该模块决定了日志最后的落地方向,例如标准输出,日志文件,滚动文件输出(当前以⽂件⼤⼩进⾏控制,当⼀个⽇志⽂件⼤⼩达到指定⼤⼩,则切换下⼀个⽂件进⾏输出)等

设计思路:设置不同的子类,不同子类控制不同的日志落地方向

2.5 日志器模块

日志器模块主要是对上面几个模块的整合,因此用户可以直接用日志器进行日志的输出,可以降低用户使用日志系统的上手难度

包含:日志信息落地模块,日志信息格式化模块,日志等级模块

2.6 异步线程模块

实现对日志信息的异步输出功能,用户将所需要输出的日志信息放入任务池中,会有专门的异步线程进行日志信息的落地工作

总结

上面就是本篇文章的主要内容,主要是讲解一下日志系统模块的设计,方便我们后续的实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值