日志系统——日志格式化模块设计

本文详细描述了一个日志模块,包括格式化字符串的使用、格式化字符及其子项,以及如何通过`Formatter`类进行消息格式化的代码实现和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,模块主要成员

该模块的主要作用是对日志消息进行格式化,将日志消息组织成制定格式的字符串

该模块主要成员有两个:1.格式化字符串。 2.格式化子项数组

1.1 格式化字符串

格式化字符串的主要功能是保存日志输出的格式字符串。其格式化字符主要有下面几种

格式化字符串定义了日志的输出格式,而格式化字符更有助于用户自由的控制日志的输出格式 。这里要注意的是由于我们信息中的日期为时间戳,因此在设置其格式化字符时还应设置对应的子格式化字符如[%d{%H:%M:%S}]指的是按照年月日输出时间

 1.2 格式化子项数组

格式化子项数组:用于按顺序保存格式化字符串对应的子格式化对象(FormatItem类)

那么什么是子格式化类(FormatItem类)?子格式化类主要负责日志消息子项的获取以及格式化,其下包含诸多子类,通过继承关系实现多态,即使是不同的子类也能依靠多态由相同的父类指针指向,从而保存到同一个vector中,Formatltem主要有以下子类:

 格式化字符,以及格式化子项的关系如下,这里我们以日期为例子

 

1.3 举例说明

例子:"[%d{%H:%M:%S}] %m%n"

pattern = "[%d{%H:%M:%S}] %m%n"
items = {
 {OtherFormatItem(), "["},
 {TimeFormatItem(), "%H:%M:%S"},
 {OtherFormatItem(), "]"},
 {MsgFormatItem (), ""},
 {NLineFormatItem (), ""}
}
message msg = {
 size_t _line = 22;
 size_t _ctime = 12345678;
 std::thread::id _tid = 0x12345678;
 std::string _logger = "logger";
 std::string _file = "main.cpp";
 std::string _payload = "创建套接字失败";
 LogLevel::level _level = ERROR;
};

格式化的过程其实就是按次序从Msg中取出需要的数据进⾏字符串的连接的过程。

最终组织出来的格式化消息: "[22:32:54] 创建套接字失败\n"

 二,代码实现

2.1 代码

核心代码bool AnalyPattern()的分析如下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值