一种日志记录方法和系统与流程

文档序号:24941946发布日期:2021-05-04 11:35阅读:124来源:国知局
一种日志记录方法和系统与流程

本发明涉及日志领域,更具体地,特别是指一种日志记录方法和系统。



背景技术:

日志记录是软件系统中最常用的调试及问题跟踪排查手段。日志记录本身不参与系统功能的实现,相反对运行效率较为敏感的场景可能会破坏功能的正常运行。优秀的日志记录系统在设计时应该尽可能降低对正常业务的影响,避免由于日志的引入导致系统执行环境的改变。例如存储系统中对io(输入输出)路径的执行时间存在较为严格的要求,对于io执行过程的日志记录必须考虑日志记录本身开销对于系统的影响。

针对现有技术中日志记录占用计算存储资源、影响系统正常业务的问题,目前尚无有效的解决方案。



技术实现要素:

有鉴于此,本发明实施例的目的在于提出一种日志记录方法和系统,能够降低日志记录的资源占用,并不干涉系统正常业务的正常运行。

基于上述目的,本发明实施例的第一方面提供了一种日志记录方法,包括执行以下步骤:

初始化日志消息队列,扫描日志数据存储组织和源码映射地图;

响应于从日志消息队列接收到普通消息,而基于普通消息的格式化数据索引并将普通消息的动态数据存储到格式化数据表项;

响应于从日志消息队列接收到路径消息,而将路径消息的映射标识和当前时间戳写入与源码映射地图相对应的代码路径记录;

响应于接收到查询日志请求,而从格式化数据表项和源码映射地图读取数据记录项以格式化和展示。

在一些实施方式中,方法还包括:在初始化日志消息队列的同时,还为日志记录线程分配计算资源并绑定到相对于业务系统核心异步运行的日志系统核心。

在一些实施方式中,扫描日志数据存储组织包括:

使用静态代码分析从日志数据存储组织中分别提取出格式化数据和动态数据;

将每种格式化数据和与格式化数据的形式相对应的动态数据形成存储普通消息的格式化数据表项;

为每个格式化数据表项赋予格式化数据索引。

在一些实施方式中,扫描源码映射地图包括:

使用静态代码分析从源码映射地图中分别提取出存储路径消息的源码路标;

为每个源码路标均生成相对应的映射标识。

在一些实施方式中,每个源码路标均包括以下至少之一:源码文件名、函数名、代码行号。

本发明实施例的第二方面提供了一种日志记录系统,包括:

处理器;和

存储器,存储有处理器可运行的程序代码,程序代码在被运行时执行以下步骤:

初始化日志消息队列,扫描日志数据存储组织和源码映射地图;

响应于从日志消息队列接收到普通消息,而基于普通消息的格式化数据索引并将普通消息的动态数据存储到格式化数据表项;

响应于从日志消息队列接收到路径消息,而将路径消息的映射标识和当前时间戳写入与源码映射地图相对应的代码路径记录;

响应于接收到查询日志请求,而从格式化数据表项和源码映射地图读取数据记录项以格式化和展示。

在一些实施方式中,步骤还包括:在初始化日志消息队列的同时,还为日志记录线程分配计算资源并绑定到相对于业务系统核心异步运行的日志系统核心。

在一些实施方式中,扫描日志数据存储组织包括:

使用静态代码分析从日志数据存储组织中分别提取出格式化数据和动态数据;

将每种格式化数据和与格式化数据的形式相对应的动态数据形成存储普通消息的格式化数据表项;

为每个格式化数据表项赋予格式化数据索引。

在一些实施方式中,扫描源码映射地图包括:

使用静态代码分析从源码映射地图中分别提取出存储路径消息的源码路标;

为每个源码路标均生成相对应的映射标识。

在一些实施方式中,每个源码路标均包括以下至少之一:源码文件名、函数名、代码行号。

本发明具有以下有益技术效果:本发明实施例提供的日志记录方法和系统,通过初始化日志消息队列,扫描日志数据存储组织和源码映射地图;响应于从日志消息队列接收到普通消息,而基于普通消息的格式化数据索引并将普通消息的动态数据存储到格式化数据表项;响应于从日志消息队列接收到路径消息,而将路径消息的映射标识和当前时间戳写入与源码映射地图相对应的代码路径记录;响应于接收到查询日志请求,而从格式化数据表项和源码映射地图读取数据记录项以格式化和展示的技术方案,能够降低日志记录的资源占用,并不干涉系统正常业务的正常运行。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的日志记录方法的流程示意图;

图2为本发明提供的日志记录方法的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

基于上述目的,本发明实施例的第一个方面,提出了一种降低日志记录的资源占用,并不干涉系统正常业务的正常运行的日志记录方法的一个实施例。图1示出的是本发明提供的日志记录方法的流程示意图。

所述的日志记录方法,如图1所示,包括执行以下步骤:

步骤s101,初始化日志消息队列,扫描日志数据存储组织和源码映射地图;

步骤s103,响应于从日志消息队列接收到普通消息,而基于普通消息的格式化数据索引并将普通消息的动态数据存储到格式化数据表项;

步骤s105,响应于从日志消息队列接收到路径消息,而将路径消息的映射标识和当前时间戳写入与源码映射地图相对应的代码路径记录;

步骤s107,响应于接收到查询日志请求,而从格式化数据表项和源码映射地图读取数据记录项以格式化和展示。

本发明通过分离格式化数据与动态数据的方式将格式化操作卸载到日志查看组件,提高日志记录效率的同时减少存储空间;基于消息事件实现日志记录的异步处理,隔离系统业务与日志记录的执行环境,减少日志记录对正常业务的影响;利用代码静态分析生成源码映射地图,通过地图坐标替换冗长的字符串记录源码调用位置,利用日志查看组件还原调用关系。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(rom)或随机存储记忆体(ram)等。所述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

在一些实施方式中,方法还包括:在初始化日志消息队列的同时,还为日志记录线程分配计算资源并绑定到相对于业务系统核心异步运行的日志系统核心。

在一些实施方式中,扫描日志数据存储组织包括:

使用静态代码分析从日志数据存储组织中分别提取出格式化数据和动态数据;

将每种格式化数据和与格式化数据的形式相对应的动态数据形成存储普通消息的格式化数据表项;

为每个格式化数据表项赋予格式化数据索引。

在一些实施方式中,扫描源码映射地图包括:

使用静态代码分析从源码映射地图中分别提取出存储路径消息的源码路标;

为每个源码路标均生成相对应的映射标识。

在一些实施方式中,每个源码路标均包括以下至少之一:源码文件名、函数名、代码行号。

下面根据图2所示的具体实施例进一步阐述本发明的具体实施方式。

参见图2,首先通过静态代码分析,将日志记录的格式化数据与动态数据拆离,形成日志数据存储组织的fd(格式化数据)表项,每个fd表项代表了一种类型的日志格式化形式,每种格式化类型可以通过在表格中的序号(fd索引)进行查找。

同时通过静态代码分析生成静态的源码映射地图,源码映射地图中的scl(源码路标)实质上是一种特定类型的fd,如源码文件名、函数名、代码行号等,其表现形式可以自行定义;mid(映射标识)为一个随机数,mid与scl一一对应,在同一个源码映射地图中不能重复。

系统进行日志记录之前,需执行日志记录初始化接口执行初始化动作:初始化动作包括初始化日志消息队列,扫描日志数据存储组织结构及源码映射地图,确定最大记录项的数量。初始化日志消息队列时,还需要分配日志记录执行的线程资源并绑定到一个日志专用核心,确保日志系统与业务系统异步执行,降低对业务系统产生的影响。

需要进行日志记录时调用日志消息发送接口。发送的消息类型分为普通消息和路径消息,普通消息的格式为fdindex+dd(动态数据);路径消息的格式为mid。消息发送过程不会阻塞,一旦发出会立即返回。

日志记录线程负责检测日志消息队列是否有新的日志记录入队,一旦检测到新的记录消息,会根据消息类型将消息存储到日志数据记录组件。普通消息会根据fdindex将dd存储到对应的fd表项中;路径消息会直接将mid信息以追加的方式存储到代码路径记录中,记录时将时间戳一并记录。

需要查询日志记录时,需要通过日志查看组件读取日志数据记录,以还原格式化的数据记录项。因为格式化动作发生在查看操作的时间而不是记录操作时间,日志记录的时效性更高,对于系统的损耗也更少。

从上述实施例可以看出,本发明实施例提供的日志记录方法,通过初始化日志消息队列,扫描日志数据存储组织和源码映射地图;响应于从日志消息队列接收到普通消息,而基于普通消息的格式化数据索引并将普通消息的动态数据存储到格式化数据表项;响应于从日志消息队列接收到路径消息,而将路径消息的映射标识和当前时间戳写入与源码映射地图相对应的代码路径记录;响应于接收到查询日志请求,而从格式化数据表项和源码映射地图读取数据记录项以格式化和展示的技术方案,能够降低日志记录的资源占用,并不干涉系统正常业务的正常运行。

需要特别指出的是,上述日志记录方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于日志记录方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。

基于上述目的,本发明实施例的第二个方面,提出了一种降低日志记录的资源占用,并不干涉系统正常业务的正常运行的日志记录系统的一个实施例。系统包括:

处理器;和

存储器,存储有处理器可运行的程序代码,所述程序代码在被运行时执行以下步骤:

初始化日志消息队列,扫描日志数据存储组织和源码映射地图;

响应于从日志消息队列接收到普通消息,而基于普通消息的格式化数据索引并将普通消息的动态数据存储到格式化数据表项;

响应于从日志消息队列接收到路径消息,而将路径消息的映射标识和当前时间戳写入与源码映射地图相对应的代码路径记录;

响应于接收到查询日志请求,而从格式化数据表项和源码映射地图读取数据记录项以格式化和展示。

在一些实施方式中,步骤还包括:在初始化日志消息队列的同时,还为日志记录线程分配计算资源并绑定到相对于业务系统核心异步运行的日志系统核心。

在一些实施方式中,扫描日志数据存储组织包括:

使用静态代码分析从日志数据存储组织中分别提取出格式化数据和动态数据;

将每种格式化数据和与格式化数据的形式相对应的动态数据形成存储普通消息的格式化数据表项;

为每个格式化数据表项赋予格式化数据索引。

在一些实施方式中,扫描源码映射地图包括:

使用静态代码分析从源码映射地图中分别提取出存储路径消息的源码路标;

为每个源码路标均生成相对应的映射标识。

在一些实施方式中,每个源码路标均包括以下至少之一:源码文件名、函数名、代码行号。

从上述实施例可以看出,本发明实施例提供的系统,通过初始化日志消息队列,扫描日志数据存储组织和源码映射地图;响应于从日志消息队列接收到普通消息,而基于普通消息的格式化数据索引并将普通消息的动态数据存储到格式化数据表项;响应于从日志消息队列接收到路径消息,而将路径消息的映射标识和当前时间戳写入与源码映射地图相对应的代码路径记录;响应于接收到查询日志请求,而从格式化数据表项和源码映射地图读取数据记录项以格式化和展示的技术方案,能够降低日志记录的资源占用,并不干涉系统正常业务的正常运行。

需要特别指出的是,上述系统的实施例采用了所述日志记录方法的实施例来具体说明各模块的工作过程,本领域技术人员能够很容易想到,将这些模块应用到所述日志记录方法的其他实施例中。当然,由于所述日志记录方法实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于所述系统也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在所述实施例之上。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上所述的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1