高性能日志系统 日志格式化输出逻辑

概述

日志消息是由许多要素组成,而日志格式化的主要作用,即是对日志消息进行格式化,组织成自己指定好的字符串结构

总体架构

  • 日志消息(LogMsg)

    • 用于存储各种日志信息,例如存储日志的级别、时间、行号等信息

  • 格式化子项(FormerItem)

    • 用于输出每一条单个的日志消息

    • 该出设计成继承方法,首先实现一个抽象基类,该基类实现所有格式化子项的公共接口;然后子类继承该抽象类,实现其具体化的格式化逻辑,比如输出时间、级别等信息

  • 格式化器(Formatter)

    • 作用:首先根据用户指定的pattern 将其解析成字符串(key:value)数组存储,然后根据解析的结果,生成具体的FormatItem实例对象,然后将这些对象放入到Items中存储,从而实现不同场景下生成不同日志信息的目的。

    • 将解析和打印日志信息放在一起,目的是为了一个接口实现指定日志打印。

  • 该模块架构总结:采用工厂模式,创建具体格式化子项,可以根据用户提供的不同pattern生成不同的格式化子项。借助该模式,实现快速拓展格式化子项,因为只需要在抽象类下添加新的子类即可。

具体实现

格式化子项的定义与实现

  • 基础类:FormatItem
    • 共享指针管理创建的实例对象,父类指针指向子类对象,从而实现调用子类对象成员函数的目的
    • 定义纯虚函数 format,子类就是通过重写该函数,实现不同的格式化日志消息
  • 子类:具体实现不同日志内容
    • 子类重写父类的format函数,然后生成不同的日志信息,比如日志级别、格式化时间等

pattern解析逻辑

pattern解析逻辑

  • 初始状态

    • 初始化一些临时变量,format_key用于存储格式化字符(%d  %p)format_val用于存储子格式字符串(如时间格式),string_row用于存储非格式化字符
    • 使用一个向量arry来存储解析后的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值