C++服务器框架开发7——日志系统LogFormatter_2

news2024/10/7 14:23:40

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。
其教学视频见:[C++高级教程]从零开始开发服务器框架(sylar)

上一篇:C++服务器框架开发6——日志系统logFormatter/size_t学习

C++服务器框架开发7——日志系统LogFormatter_2

  • 目前进度

目前进度

学习到第四个视频30分18s,up对log.c中的LogFormatter::init()进行了定义,该函数功能是解析日志模板,即解析m_pattern。内容为下图:
在这里插入图片描述
要点:

  1. 从第87行的注释可以看到,要解析的格式可能是3种情况,第一种是百分号后面跟上内容A(即,%A),第二种是百分号跟上内容A然后还有个花括号内容B(即,%A{B}),第三种就是多个百分号(即,%%)。
  2. 第90行的vec用来记录解析出来的每项格式内容。3元祖,依次对应内容:A、B、内容状态(1表示内容正确,0表示错误内容)。
  3. 第91行的nstr用于记录第三种解析格式中的%(如果有k个%,则存储k-1个)。从92~103行的代码可看到,如果当前索引对应的字符是%,并且下一个字符也是%,则将1个%字符存入nstr中,直到遇见非%字符。
  4. 第112~131行,记录A和B,分别存储在str和fmt中。
  5. fmt_status用于记录当前解析出的内容是%A、%A{B}、错误的内容。0代表%A;1代表没接收到右花括号,是错误内容%A{B;2代表%A{B}。
  6. 第133~150行,每次获得一个%A、%A{B}或错误的内容后,将其存入vec。存入之前,先把nstr存进去。
  7. 第152~154行,考虑到在m_pattern的结尾可能有多个百分号%%,即结束时,nstr非空,所以这3行代码把nstr存入vec。

注意:首先,这个init函数还未实现完整;其次,它目前存在一些明显的问题。
问题1:需要在第131行的右花括号前面,得加上++n;,否则111行的while循环就是死循环了。
问题2:每次将nstr存入vec后,都需要执行nstr.clear()进行清空。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/600856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java程序设计入门教程--随机类Random

随机数的类 在程序设计中,经常都需要产生一些随机数,比如模拟随机抽奖、抽样等。 Random类在java.util包中,是专门用于提供生成一个随机数的类,随机数的生成相关方法都在该内中。比如Random类的nextInt方法需要一int型值作为参数&…

【生信】R语言在RNA-seq中的应用

R语言在RNA-seq中的应用 文章目录 R语言在RNA-seq中的应用生成工作流环境读取和处理数据由targets文件提供实验定义对实验数据进行质量过滤和修剪生成FASTQ质量报告 比对建立HISAT2索引并比对 读长量化读段计数样本间的相关性分析 差异表达分析运行edgeR可视化差异表达结果计算…

11.Ansible Roles介绍

什么是Ansible角色? 就像在现实世界中给不同的人分配角色一样,让他们成为医生工程师, 宇航员, 警察,或者厨师。在Ansible的世界里, 你可以给服务器分配角色,让它们成为数据库服务器、 Web服务器、 Redis消息服务器或备份服务器&#…

LCUSB-13xB/M 系列高性能 USB 接口 CAN 卡在医疗体外诊断仪上的应用

1,LCUSB -13xB/M 系列高性能 USB 接口 CAN 卡的功能介绍 LCUSB -13xB/M 系列高性能 USB 接口 CAN 卡,坚固 金属外壳,具有更佳 EMC 性能,插到用户设备 USB 接口 上,快速扩展出 1~2 路 CAN 通道,可作为组件集…

java基础学习

一、注释 1)当行注释 // 2)多行注释 /* ... */ 3)文档注释 (java特有) /** author 张三 version v1.0 这是文档注释,需要将class用public修饰 */ 二、关键字 (1)48个关键…

tinker CAD入门操作

入门 - 导航和菜单 欢迎来到设计世界! 设计是发现所有尚未完成的东西的艺术。它是学习和教学,打破和制造,看到和展示的平等部分。 设计就是分享! Tinkercad是一款功能强大且易于使用的工具,用于创建数字设计&#xff0…

CVE-2023-33246 Apache RocketMQ RCE

0x01 漏洞介绍 Apache RocketMQ是一款开源的分布式消息和流处理平台,提供了高效、可靠、可扩展的低延迟消息和流数据处理能力,广泛用于异步通信、应用解耦、系统集成以及大数据、实时计算等场景。 漏洞的官方描述为当RocketMQ多个组件,包括N…

chatgpt赋能python:Python分三行输入:提高编程效率的绝佳方法

Python分三行输入:提高编程效率的绝佳方法 Python是一种高级编程语言,以简洁、易读的代码著称。Python分三行输入是一种旨在提高编程效率的技术,它可以减少代码阅读时间、降低语法错误率,并且让代码更加易于维护。在本文中&#…

0501源码分析-启动过程-springboot2.7.x系列

文章目录 1前言2 启动第一阶段2.1 deduceFromClasspath 推断应用类型2.2 getSpringFactoriesInstances(Class)2.3 ApplicationContextInitializer2.4 ApplicationListener2.5 自定义接口实现配置示例 3 启动第二阶段3.1 SpringApplicationRunListener3.2 容器创建和准备 4 总结…

11. 数据结构之二叉树

前言 上一节,简单概述了树这种数据结构,以及树结构向下,具有某些一些特征的树,比如二叉树,B树,B树,堆等。其中,二叉树是一个很重要的模块。也是在一些技术面试中,可能会…

【Vue】学习笔记-Vuex

Vuex 理解VuexVuex是什么什么时候使用VuexVuex 工作原理图求和案例使用纯vue编写 搭建Vuex环境使用Vuex编写求和案例getters配置项四个map方法的使用多组件共享数据案例模块化命名空间 理解Vuex Vuex是什么 概念:专门在vue中实现集中式状态(数据) 管理的一个vue插…

基于P-Tuningv2轻量微调和推理chatglm

类ChatGPT的部署与微调(下):从GLM、ChatGLM到MOSS、ChatDoctor、可商用_v_JULY_v的博客-CSDN博客随着『GPT4多模态/Microsoft 365 Copilot/Github Copilot X/ChatGPT插件』的推出,绝大部分公司的技术 产品 服务,以及绝大部分人的工作都将被革…

【CMake 入门与进阶(2)】CMake编译设置——多个源文件编译及生成库文件(附代码)

多个源文件 上篇我们学习了单个源文件的cmake 的编译,不过一个源文件的例子似乎没什么意思,我们再加入一个hello.h 头文件和 hello.c 源文件。在 hello.c 文件中 定义了一个函数 hello,然后在 main.c 源文件中将会调用该函数&#xff…

客服都要下岗了? 当ChatGPT遇见私有数据,秒变AI智能客服!

用ChatGPT搭建基于私有数据的WorkPlus AI客服机器人这个想法,源于WorkPlus售前工作需求。在ChatGPT之前,其实对话式AI一直在被广泛使用在客服场景,只不过不大智能而已。比如你应该看到不少电商客服产品,就有类似的功能&#xff0c…

车站信息管理系统(面向对象程序设计python版)

一、基本概述 1.项目背景 随着大数据时代的发展,大数据抓取了人们最想要的信息,数据查询能帮助用户获取更有用的信息,让每个人都能享受到大数据带给生活的高效和便捷。 2.设计目的 为了大大缩减人们出行选择站点所需时间,为了让人们在陌生地区,在对当地交通不熟的情况…

Redis数据类型之(哈希Hash和集合Set)

Redis数据类型之(哈希Hash和集合Set) 一定注意看红色注意项。 哈希(Hash): Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存…

promethues 之PromQL数据类型介绍(二)

promethues 之PromQL数据类型介绍(二) 1、PromQL 介绍 PromQL是promethues 监控系统内置的一种查询语言,类似于MySQL的SQL语句,该语言仅用于读取数据。PromQL是我们学习Promethues最困难也是最重要的部分。当Promethues从系统和服务收集到指标数据时&…

PIP-Net:用于可解释图像分类的基于patch的直观原型

文章目录 PIP-Net: Patch-Based Intuitive Prototypes for Interpretable Image Classification摘要本文方法模型结构Self-Supervised Pre-Training of PrototypesTraining PIP-NetScoring Sheet ReasoningCompact Explanations 实验结果 PIP-Net: Patch-Based Intuitive Proto…

bug 记录 - 接口被重复调用,响应时长不同,结果被覆盖的问题

发现问题与调试过程 需求:输入框中输入关键字,根据关键字去调用接口,返回模糊查询的结果集合。问题:输入的关键字越少,接口响应时间越长。例如:输入“阿”,接口响应时间大概是 5 秒&#xff0c…

【计算机网络中ip概念总结】【平时我们说的ip 到底是什么】【计算机网络中 ip地址是什么】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…