CN114546793A - 一种日志生成方法、装置和计算机可读存储介质 - Google Patents
一种日志生成方法、装置和计算机可读存储介质 Download PDFInfo
- Publication number
- CN114546793A CN114546793A CN202011329469.1A CN202011329469A CN114546793A CN 114546793 A CN114546793 A CN 114546793A CN 202011329469 A CN202011329469 A CN 202011329469A CN 114546793 A CN114546793 A CN 114546793A
- Authority
- CN
- China
- Prior art keywords
- log
- stack
- information
- target
- preset
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种日志生成方法、装置和计算机可读存储介质;本发明实施例在应用程序的业务逻辑代码中插入至少一个预设日志生成代码后,得到目标业务逻辑代码,然后,运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,然后,基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志;该方案可以提升日志信息的定位准确率。
Description
技术领域
本发明涉及通信技术领域,具体涉及一种日志生成方法、装置和计算机可读存储介质。
背景技术
近年来,随着互联网技术的飞速发展,越来越多的应用程序应用在生活中。当应用程序运行时出现问题,需要通过运行时产生的日志去分析出现问题的原因,因此,在应用程序运行时,需要生成日志。现有的日志生成方法主要通过在业务逻辑代码中插入日志生成代码,运行业务逻辑代码时触发生成日志。
在对现有技术的研究和实践过程中,本发明的发明人发现现有的日志生成方法完全依赖插入日志生成代码来生成日志,生成的日志信息单一,有效信息不足,而且在一些场景下,可能存在多种情况生成同样的日志信息,因此,导致日志信息的定位准确率大大降低。
发明内容
本发明实施例提供一种日志生成方法、装置和计算机可读存储介质,可以提高日志信息的定位准确率。
一种日志生成方法,包括:
在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码;
运行所述目标业务逻辑代码,以得到所述预设日志生成代码对应的初始日志;
获取所述初始日志对应的当前线程的调用者堆栈,所述调用者堆栈包括多个堆栈跟踪对象;
基于预设堆栈关系,在所述堆栈跟踪对象中筛选出调度所述初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象;
根据所述目标堆栈跟踪对象,确定所述初始日志的上下文信息,并将所述上下文信息和初始日志进行拼接,以生成所述应用程序的目标日志。
相应的,本发明实施例提供一种日志生成装置,包括:
插入单元,用于在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码;
运行单元,用于运行所述目标业务逻辑代码,以得到所述预设日志生成代码对应的初始日志;
获取单元,用于获取所述初始日志对应的当前线程的调用者堆栈,所述调用者堆栈包括多个堆栈跟踪对象;
筛选单元,用于基于预设堆栈关系,在所述堆栈跟踪对象中筛选出调度所述初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象;
生成单元,用于根据所述目标堆栈跟踪对象,确定所述初始日志的上下文信息,并将所述上下文信息和初始日志进行拼接,以生成所述应用程序的目标日志。
可选的,在一些实施例中,所述筛选单元,具体可以用于根据所述预设堆栈关系,确定出调度所述初始日志的堆栈跟踪对象的栈位置信息;基于所述栈位置信息,在所述调用者堆栈中筛选出所述目标堆栈跟踪对象。
可选的,在一些实施例中,所述筛选单元,具体可以用于获取所述调用者堆栈的堆栈层信息,所述堆栈层信息用于指示所述调用者堆栈的堆栈层;根据所述预设堆栈关系,在所述堆栈层信息中确定出调度所述初始日志的堆栈跟踪对象对应的目标堆栈层;将所述目标堆栈层在所述调用者堆栈中的位置信息作为调度所述初始日志的堆栈跟踪对象的栈位置信息。
可选的,在一些实施例中,所述筛选单元,具体可以用于在所述堆栈层信息中识别出所述调用者堆栈的至少一个堆栈层;根据所述预设堆栈关系,确定所述堆栈层对应的对象信息;基于所述对象信息,在所述堆栈层中筛选出调度所述初始日志的堆栈跟踪对象对应的堆栈层,得到所述目标堆栈层。
可选的,在一些实施例中,所述生成单元,具体可以用于获取所述目标堆栈跟踪对象的属性信息,并将所述属性信息作为调度所述初始日志的调度者的调度信息;根据所述调度信息,确定所述初始日志的上下文信息。
可选的,在一些实施例中,所述生成单元,具体可以用于对所述调度信息进行分类,并按照分类结果将所述调度信息转化为字符串信息,得到多个类型的字符串信息;根据预设拼接规则,将所述多个类型的字符串信息进行拼接,得到所述初始日志的上下文信息。
可选的,在一些实施例中,所述生成单元,具体可以用于将所述上下文信息和初始日志进行拼接,生成所述应用程序的目标日志的打印信息;根据所述打印信息,打印出所述应用程序的目标日志。
可选的,在一些实施例中,所述生成单元,具体可以用于在所述初始日志中确定出用于拼接所述上下文信息的拼接位置;根据所述拼接位置,将所述上下文信息和初始日志进行拼接,得到拼接后初始日志;根据所述拼接后初始日志,生成所述应用程序的目标日志的打印信息。
可选的,在一些实施例中,所述生成单元,具体可以用于获取日志封装信息的存储路径;根据所述存储路径,将所述拼接后初始日志添加至所述日志封装信息,得到所述应用程序的目标日志的打印信息。
可选的,在一些实施例中,所述生成单元,具体可以用于根据所述打印信息,确定所述目标日志的打印参数;基于所述打印参数,对所述打印信息进行打印,得到所述应用程序的目标日志。
可选的,在一些实施例中,所述运行单元,具体可以用于运行所述目标业务逻辑代码;当运行到所述预设日志生成代码时,生成所述预设日志生成代码的日志信息;根据所述日志信息,生成所述预设日志生成代码对应的初始日志。
可选的,在一些实施例中,所述运行单元,具体可以用于采用预设封装方式,对所述日志信息进行封装,得到日志封装信息;在所述日志封装信息中提取出所述预设日志生成代码对应的初始日志。
可选的,在一些实施例中,所述插入单元,具体可以用于获取待生成日志的应用程序的代码信息,在所述代码信息中筛选出业务逻辑代码;根据预设插入策略,在所述业务逻辑代码中确定出需要插入所述预设日志生成代码的插入位置;基于所述插入位置,将至少一个所述预设日志生成代码插入至所述业务逻辑代码,得到目标业务逻辑代码。
此外,本发明实施例还提供一种电子设备,包括处理器和存储器,所述存储器存储有应用程序,所述处理器用于运行所述存储器内的应用程序实现本发明实施例提供的日志生成方法。
此外,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本发明实施例所提供的任一种日志生成方法中的步骤。
本发明实施例在应用程序的业务逻辑代码中插入至少一个预设日志生成代码后,得到目标业务逻辑代码,然后,运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,然后,基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志;由于该方案在生成预设日志代码对应的初始日志的基础上,获取当前线程的调用者堆栈,在调用者堆栈中识别出调度该初始日志的目标堆栈跟踪对象,并根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将初始日志和上下文信息进行拼接,生成目标日志,使得目标日志提供了上层调度者关联的能力,从而大大提升日志信息的定位准确率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的日志生成方法的场景示意图;
图2是本发明实施例提供的日志生成方法的流程示意图;
图3是本发明实施例提供的调用者堆栈的中各个堆栈层的示意图;
图4是本发明实施例提供的打印出的目标日志的示意图;
图5是本发明实施例提供的日志生成的模块架构示意图;
图6是本发明实施例提供的日志生成的另一流程示意图;
图7是本发明实施例提供的日志生成装置的结构示意图;
图8是本发明实施例提供的电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种日志生成方法、装置和计算机可读存储介质。其中,该日志生成装置可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备。
其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、网络加速服务(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
例如,参见图1,以日志生成装置集成在电子设备中为例,电子设备在应用程序的业务逻辑代码中插入至少一个预设日志生成代码后,得到目标业务逻辑代码,然后,运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,然后,基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志。
其中,日志可以为网络设备、系统及服务程序等,在运行时产生的事件记录,日志中可以记录日期、事件、使用者及动作等相爱难改观操作的描述等信息。
以下分别进行详细说明。需要说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本实施例将从日志生成装置的角度进行描述,该日志生成装置具体可以集成在电子设备中,该电子设备可以是服务器,也可以是终端等设备;其中,该终端可以包括平板电脑、笔记本电脑、以及个人计算机(PC,Personal Computer)、可穿戴设备、虚拟现实设备或其他可以生成日志的智能设备等设备。
一种日志生成方法,包括:
在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码,运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志。
如图2所示,该日志生成方法的具体流程如下:
101、在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码。
其中,业务逻辑代码可以为描述应用程序的业务逻辑的代码,所谓业务逻辑是指在应用程序中一个实体单元为了向另一个实体单元提供服务,应该具备的规则与流程。
其中,预设日志生成代码可以为运行时可以触发生成日志信息的代码,也可以称为日志打印代码。将预设日志生成代码插入到业务逻辑代码中,也被称之为日志埋点。
例如,可以获取待生成日志的应用程序的代码信息,在代码信息中筛选出业务逻辑代码,比如,接收需要生成日志的应用程序服务商上传的代码信息,根据代码信息的代码目录,在上传的代码信息中筛选出业务逻辑代码,还可以从网络上爬取应用程序的代码信息,在代码信息中识别出该应用程序的业务逻辑代码。根据预设插入策略,在业务逻辑代码中确定出需要插入预设日志生代码的插入位置,比如,以预设插入策略为在业务逻辑代码的关键节点中插入预设日志生成代码为例,在业务逻辑代码中识别出关键节点,并获取关键节点在业务逻辑代码中的代码位置,将代码位置作为预设日志生成代码的插入位置。预设插入策略还可以为某些特定的函数中插入预设日志生成代码,此时,就需要在业务逻辑代码中识别出这些特定的函数在业务逻辑代码中的代码位置,将该代码位置作为预设日志生成代码的插入位置,预设插入策略不是固定的,可以根据实际项目进行预设。基于插入位置,将至少一个预设日志生成代码插入至业务逻辑代码,得到目标业务逻辑代码,比如,当插入位置为多个时,就需要在每一个插入位置插入预设日志生成代码,插入的预设日志生成代码可以是相同也可以是不同。还可以根据插入位置的不同,对插入位置进行分类,在预设日志生成代码集合中筛选出每一个插入位置的类型对应的预设日志生成代码,将预设日志生成代码插入至对应的插入位置,从而得到目标业务逻辑代码。
102、运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志。
例如,运行目标业务逻辑代码,当运行到预设日志生成代码时,就可以根据预设日志生成代码,生成预设日志生成代码对应的日志信息,比如,通过业务逻辑API来运行目标业务逻辑代码,该业务逻辑API可以为“getUserlnfo()”,从而输出生成日志信息。根据日志信息,生成预设日志生成代码对应的初始日志,比如,采用预设封装方式,对日志信息进行封装,得到日志封装信息,譬如,可以利用Android(一种操作系统)的Log的封装方式,将日志信息封装成新的日志类WxLog(一种日志封装信息)。在日志封装信息中提取出预设日志生成代码对应的初始日志,比如,在WxLog中截取到日志信息的内容,得到预设日志生成代码对应的初始日志。
103、获取初始日志对应的当前线程的调用者堆栈。
其中,调用者堆栈包括多个堆栈跟踪对象,所谓堆栈跟踪对象可以为当程序运行且生成日志信息时,当前线程中一系列的函数调用的调用栈。
例如,可以利用预设的堆栈追踪函数,获取初始日志对应的当前线程的调用者堆栈,比如,可以利用“Thread.currentThread().getStacktrace()”的API(一种应用程序接口,也可以称之为函数),直接获取当前线程的函数调度的堆栈跟踪数组对象,从而得到调用者堆栈。调用者堆栈中从栈顶到栈底,包含了多个调用API的调用栈,每一个调用栈就可以看作是一个堆栈跟踪对象。
104、基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标跟踪对象。
例如,根据预设堆栈关系,确定出调度初始日志的堆栈跟踪对象的栈位置信息,比如,获取调用者堆栈的堆栈层信息,该堆栈层信息用于指示调用者堆栈的堆栈层。根据预设堆栈关系,在堆栈层信息中确定出调度初始日志的堆栈跟踪对象对应的目标堆栈层,比如,在堆栈层信息中识别出调用者堆栈的至少一个堆栈层,根据预设堆栈关系,确定堆栈层对应的对象信息,比如,根据预设堆栈关系,就可以确定调用者堆栈中的各个堆栈层对应的堆栈跟踪对象的信息,具体可以如图3所示,调用栈的堆栈跟踪数组对象的第0位的堆栈层为当前调用栈,该调用栈主要是调用上下文获取函数的堆栈层,位于当前函数栈的栈顶,第1位的堆栈层是日志输出API调用栈,该调用栈主要用于调度上下文获取模块的API,也就是输出日志的输出层,位于当前函数栈栈顶的第二位。堆栈跟踪数组对象的第2位的堆栈层为业务逻辑API调用栈,它是用来调度日志输出API的调用栈的具体位置,后面的调用栈就是从栈顶到栈底的调用API的栈,这些调用栈都为历史调栈,从而得到每个堆栈层的对象信息。基于对象信息,在堆栈层中筛选出调度初始日志的堆栈跟踪对象对应的堆栈层,得到目标堆栈层,比如,通过对对象信息进行分析,就可以确定堆栈跟踪数组对象的第2位,也就是栈顶第三位对应的堆栈层就可以为调度初始日志的堆栈跟踪对象对应的目标堆栈层。将目标堆栈层在调用者堆栈中的位置信息作为调度初始日志的堆栈跟踪对象的栈位置信息,比如,以目标堆栈层在调用者堆栈中的位置为堆栈跟踪数组对象的第2位为例,此时,目标堆栈层在调用者堆栈中的位置就可以为栈顶第三层,调度初始日志的堆栈跟踪对象的栈位置信息就可以为栈顶第三层。
基于栈位置信息,在调用者堆栈中筛选出目标堆栈跟踪对象,比如,可以采用“Thread.currentThread().getStacktrace()[2]”的API在调用者堆栈中获取到调度初始日志输出层的业务逻辑层的堆栈跟踪对象,将该堆栈跟踪对象作为调度初始日志的目标堆栈跟踪对象。
105、根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志。
其中,上下文信息可以为初始日志的日志调用API的信息,通过该上下文信息就可以确定初始日志调度的调度者的类名、方法名和行号信息等信息。从而可以更加准确的通过日志来进行定位。
例如,可以根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志,具体可以如下:
S1、根据目标堆栈跟踪对象,确定初始日志的上下文信息。
例如,可以获取目标堆栈跟踪对象的属性信息,并将属性信息作为调度初始日志的调度者的调度信息,根据调度信息,确定初始日志的上下文信息,具体可以如下:
(1)获取目标堆栈跟踪对象的属性信息,并将属性信息作为调度初始日志的调度者的调度信息。
例如,在本地数据库中获取到该目标堆栈跟踪对象的属性信息,该属性信息可以包括目标堆栈跟踪对象的类名、方法名和行号信息等。将属性信息作为调度初始日志的调度者的调度信息,比如,将目标堆栈跟踪对象作为日志输出层调度者,将目标堆栈跟踪对象的类名、方法名和行号信息就可以为作为调度者的类名、方法名和行号信息等,将调度者的类名、方法名和行号信息等作为调度信息。
(2)根据调度信息,确定初始日志的上下文信息。
例如,对调度信息进行分类,并按照分类结果将调度信息转换为字符串信息,得到多个类型的字符串信息,比如,将调度信息分为调度者的类名、方法名和行号信息等,将分类后的调度者的类名、方法名和行号信息转换为字符串信息,就可以得到多个类型的字符串信息。根据预设拼接规则,将多个类型的字符串信息进行拼接,得到初始日志的上下文信息,比如,根据预设拼接规则,确定多个类型的字符串信息的拼接顺序,根据拼接顺序,将调度者的类名、方法名和行号信息对应的字符串信息进行拼接,从而得到初始日志的上下文信息。
S2、将上下文信息和初始日志进行拼接,以生成应用程序的目标日志。
例如,将上下文信息和初始日志进行拼接,生成应用程序的目标日志的打印信息,根据打印信息,打印出应用程序的目标日志,具体可以如下:
(1)将上下文信息和初始日志进行拼接,生成应用程序的目标日志的打印信息。
其中,打印信息可以为利用Android原生的Log可以打印成日志的信息。
例如,在初始日志中确定出用于拼接上下文信息的拼接位置,比如,可以将初始日志的开头或末尾处作为拼接上下文信息的拼接位置。根据拼接位置,将上下文信息和初始日志进行拼接,得到拼接后初始日志,比如,可以将上下文信息拼接在初始日志的开头或末尾处,就可以得到拼接后初始日志。根据拼接后初始日志,生成应用程序的目标日志的打印信息,比如,获取日志封装信息的存储路径,根据存储路径,将拼接后初始日志添加中日志封装信息,得到应用程序的目标日志的打印信息,譬如,获取封装好的日志类WxLog的存储路径,根据该存储路径,将拼接后初始日志添加至日志类WxLog,得到应用程序的目标日志的打印信息。
(2)根据打印信息,打印出应用程序的目标日志。
其中,日志打印主要指的是日志的输出,输出日志文件,与传统的打印存在本质的区别,日志打印无需任何打印设备。在Android系统中,通常利用原生的Log来完成日志打印。
例如,根据打印信息,确定目标日志的打印参数,比如,根据打印信息,确定目标日志的日志等级、存储路径等打印参数。基于打印参数,对打印信息进行打印,得到应用程序的目标日志,比如,根据目标日志的日志等级和存储路径等参数,利用Android系统中原生的Log对打印信息进行打印,得到应用程序的目标日志,打印出的目标日志可以如图4所示。
其中,对于日志生成来说,主要通过上层业务逻辑模块来生成初始日志的打印数据,并传递给日志输出模块,日志输出模块通过调度上下文信息获取模块来获取打初始日志的上下文信息,将上下文信息与初始日志的打印数据进行拼接,得到应用程序的目标日志的实际打印数据,调度原生Log对实际打印数据进行打印,从而得到应用程序的目标日志,架构图可以如图5所示。
由以上可知,本实施例在应用程序的业务逻辑代码中插入至少一个预设日志生成代码后,得到目标业务逻辑代码,然后,运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,然后,基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志;由于该方案在生成预设日志代码对应的初始日志的基础上,获取当前线程的调用者堆栈,在调用者堆栈中识别出调度该初始日志的目标堆栈跟踪对象,并根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将初始日志和上下文信息进行拼接,生成目标日志,使得目标日志提供了上层调度者关联的能力,从而大大提升日志信息的定位准确率。
根据上面实施例所描述的方法,以下将举例作进一步详细说明。
在本实施例中,将以该日志生成装置具体集成在电子设备,电子设备为终端为例进行说明。
如图6所示,一种日志生成方法,具体流程如下:
201、终端在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码。
例如,终端接收需要生成日志的应用程序服务商上传的代码信息,根据代码信息的代码目录,在上传的代码信息中筛选出业务逻辑代码,还可以从网络上爬取应用程序的代码信息,在代码信息中识别出该应用程序的业务逻辑代码。预设插入策略可以为在业务逻辑代码的关键节点中插入预设日志生成代码,在业务逻辑代码中识别出关键节点,并获取关键节点在业务逻辑代码中的代码位置,将代码位置作为预设日志生成代码的插入位置。预设插入策略还可以为某些特定的函数中插入预设日志生成代码,此时,就需要在业务逻辑代码中识别出这些特定的函数在业务逻辑代码中的代码位置,将该代码位置作为预设日志生成代码的插入位置,预设插入策略不是固定的,可以根据实际项目进行预设。当插入位置为多个时,就需要在每一个插入位置插入预设日志生成代码,插入的预设日志生成代码可以是相同也可以是不同。还可以根据插入位置的不同,对插入位置进行分类,在预设日志生成代码集合中筛选出每一个插入位置的类型对应的预设日志生成代码,将预设日志生成代码插入至对应的插入位置,从而得到目标业务逻辑代码。
202、终端运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志。
例如,通过业务逻辑API来运行目标业务逻辑代码,该业务逻辑API可以为“getUserlnfo()”,从而输出生成日志信息。然后,利用Android的Log的封装方式,将日志信息封装成新的日志类WxLog。在WxLog中截取到日志信息的内容,得到预设日志生成代码对应的初始日志。
203、终端获取初始日志对应的当前线程的调用者堆栈。
例如,终端利用“Thread.currentThread().getStacktrace()”的API直接获取当前线程的函数调度的堆栈跟踪数组对象,从而得到调用者堆栈。调用者堆栈中从栈顶到栈底,包含了多个调用API的调用栈,每一个调用栈就可以看作是一个堆栈跟踪对象。
204、终端基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标跟踪对象。
例如,终端获取调用者堆栈的堆栈层信息,该堆栈层信息用于指示调用者堆栈的堆栈层。在堆栈层信息中识别出调用者堆栈的至少一个堆栈层,根据预设堆栈关系,就可以确定调用者堆栈中的各个堆栈层对应的堆栈跟踪对象的信息,其中,调用者堆栈中堆栈跟踪数组对象的第0位的堆栈层为当前调用栈,该调用栈主要是调用上下文获取函数的堆栈层,位于当前函数栈的栈顶,第1位的堆栈层是日志输出API调用栈,该调用栈主要用于调度上下文获取模块的API,也就是输出日志的输出层,位于当前函数栈栈顶的第二位。堆栈跟踪数组对象的第2位的堆栈层为业务逻辑API调用栈,它是用来调度日志输出API的调用栈的具体位置,后面的调用栈就是从栈顶到栈底的调用API的栈,这些调用栈都为历史调栈,从而得到每个堆栈层的对象信息。通过对对象信息进行分析,就可以确定堆栈跟踪数组对象的第2位,也就是栈顶第三位对应的堆栈层可以为调度初始日志的堆栈跟踪对象对应的目标堆栈层。此时,目标堆栈层在调用者堆栈中的位置就可以为栈顶第三层,调度初始日志的堆栈跟踪对象的栈位置信息就可以为栈顶第三层。采用“Thread.currentThread().getStacktrace()[2]”的API在调用者堆栈中获取到调度初始日志输出层的业务逻辑层的堆栈跟踪对象,将该堆栈跟踪对象作为调度初始日志的目标堆栈跟踪对象。
205、终端根据目标堆栈跟踪对象,确定初始日志的上下文信息。
例如,终端可以获取目标堆栈跟踪对象的属性信息,并将属性信息作为调度初始日志的调度者的调度信息,根据调度信息,确定初始日志的上下文信息,具体可以如下:
(1)终端获取目标堆栈跟踪对象的属性信息,并将属性信息作为调度初始日志的调度者的调度信息。
例如,终端在本地数据库中获取到该目标堆栈跟踪对象的属性信息,该属性信息可以包括目标堆栈跟踪对象的类名、方法名和行号信息等。将目标堆栈跟踪对象作为日志输出层调度者,将目标堆栈跟踪对象的类名、方法名和行号信息就可以为作为调度者的类名、方法名和行号信息等,将调度者的类名、方法名和行号信息等作为调度信息。
(2)终端根据调度信息,确定初始日志的上下文信息。
例如,终端将调度信息分为调度者的类名、方法名和行号信息等,将分类后的调度者的类名、方法名和行号信息转换为字符串信息,就可以得到多个类型的字符串信息。根据预设拼接规则,确定多个类型的字符串信息的拼接顺序,根据拼接顺序,将调度者的类名、方法名和行号信息对应的字符串信息进行拼接,从而得到初始日志的上下文信息。
206、终端将上下文信息和初始日志进行拼接,以生成应用程序的目标日志。
例如,终端将上下文信息和初始日志进行拼接,生成应用程序的目标日志的打印信息,根据打印信息,打印出应用程序的目标日志,具体可以如下:
(1)终端将上下文信息和初始日志进行拼接,生成应用程序的目标日志的打印信息。
例如,终端可以将初始日志的开头或末尾处作为拼接上下文信息的拼接位置,将上下文信息拼接在初始日志的开头或末尾处,就可以得到拼接后初始日志。获取封装好的日志类WxLog的存储路径,根据该存储路径,将拼接后初始日志添加至日志类WxLog,得到应用程序的目标日志的打印信息。
(2)终端根据打印信息,打印出应用程序的目标日志。
例如,终端根据打印信息,确定目标日志的日志等级、存储路径等打印参数。根据目标日志的日志等级和存储路径等参数,利用Android系统中原生的Log对打印信息进行打印,得到应用程序的目标日志。
由以上可知,本实施例终端在应用程序的业务逻辑代码中插入至少一个预设日志生成代码后,得到目标业务逻辑代码,然后,运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,然后,基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志;由于该方案在生成预设日志代码对应的初始日志的基础上,获取当前线程的调用者堆栈,在调用者堆栈中识别出调度该初始日志的目标堆栈跟踪对象,并根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将初始日志和上下文信息进行拼接,生成目标日志,使得目标日志提供了上层调度者关联的能力,从而大大提升日志信息的定位准确率。
为了更好地实施以上方法,本发明实施例还提供一种日志生成装置,该日志生成装置可以集成在电子设备,比如服务器或终端等设备中,该终端可以包括平板电脑、笔记本电脑和/或个人计算机等。
例如,如图7所示,该日志生成装置可以包括插入单元301、运行单元302、获取单元303、筛选单元304和生成单元305,如下:
(1)插入单元301;
插入单元301,用于在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码。
例如,插入单元301,具体可以用于获取待生成日志的应用程序的代码信息,在代码信息中筛选出业务逻辑代码,根据预设插入策略,在业务逻辑代码中确定出需要插入预设日志生成代码的插入位置,基于插入位置,将至少一个预设日志生成代码插入至业务逻辑代码,得到目标业务逻辑代码。
(2)运行单元302;
运行单元302,用于运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,
例如,运行单元302,具体可以用于运行目标业务逻辑代码,当运行到预设日志生成代码时,生成预设日志生成代码的日志信息,根据日志信息,生成预设日志生成代码对应的初始日志。
(3)获取单元303;
获取单元303,用于获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象。
例如,获取单元303,具体可以用于利用预设的堆栈追踪函数,获取当前线程的函数调度的堆栈跟踪数组对象,从而得到调用者堆栈。调用者堆栈中从栈顶到栈底,包含了多个调用API的调用栈,每一个调用栈就可以看作是一个堆栈跟踪对象。
(4)筛选单元304;
筛选单元304,用于基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象。
例如,筛选单元304,具体可以用于根据预设堆栈关系,确定出调度初始日志的堆栈跟踪对象的栈位置信息,基于栈位置信息,在调用者堆栈中筛选出目标堆栈跟踪对象。
(5)生成单元305;
生成单元305,用于根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志。
例如,生成单元305,具体可以用于获取目标堆栈跟踪对象的属性信息,并将属性信息作为调度初始日志的调度者的调度信息,根据调度信息,确定初始日志的上下文信息,将上下文信息和初始日志进行拼接,生成应用程序的目标日志的打印信息,根据打印信息,打印出应用程序的目标日志。
具体实施时,以上各个单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个单元的具体实施可参见前面的方法实施例,在此不再赘述。
由以上可知,本实施例插入单元301在应用程序的业务逻辑代码中插入至少一个预设日志生成代码后,得到目标业务逻辑代码,然后,运行单元302运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取单元303获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,然后,筛选单元304基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,生成单元305根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志;由于该方案在生成预设日志代码对应的初始日志的基础上,获取当前线程的调用者堆栈,在调用者堆栈中识别出调度该初始日志的目标堆栈跟踪对象,并根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将初始日志和上下文信息进行拼接,生成目标日志,使得目标日志提供了上层调度者关联的能力,从而大大提升日志信息的定位准确率。
本发明实施例还提供一种电子设备,如图8所示,其示出了本发明实施例所涉及的电子设备的结构示意图,具体来讲:
该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图8中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
电子设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该电子设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码,运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志。
例如,获取待生成日志的应用程序的代码信息,在代码信息中筛选出业务逻辑代码,根据预设插入策略,在业务逻辑代码中确定出需要插入预设日志生成代码的插入位置,基于插入位置,将至少一个预设日志生成代码插入至业务逻辑代码,得到目标业务逻辑代码。运行目标业务逻辑代码,当运行到预设日志生成代码时,生成预设日志生成代码的日志信息,根据日志信息,生成预设日志生成代码对应的初始日志。利用预设的堆栈追踪函数,获取当前线程的函数调度的堆栈跟踪数组对象,从而得到调用者堆栈。调用者堆栈中从栈顶到栈底,包含了多个调用API的调用栈,每一个调用栈就可以看作是一个堆栈跟踪对象。根据预设堆栈关系,确定出调度初始日志的堆栈跟踪对象的栈位置信息,基于栈位置信息,在调用者堆栈中筛选出目标堆栈跟踪对象。获取目标堆栈跟踪对象的属性信息,并将属性信息作为调度初始日志的调度者的调度信息,根据调度信息,确定初始日志的上下文信息,将上下文信息和初始日志进行拼接,生成应用程序的目标日志的打印信息,根据打印信息,打印出应用程序的目标日志。
以上各个操作的具体实施可参见前面的实施例,在此不作赘述。
由以上可知,本发明实施例在应用程序的业务逻辑代码中插入至少一个预设日志生成代码后,得到目标业务逻辑代码,然后,运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,然后,基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志;由于该方案在生成预设日志代码对应的初始日志的基础上,获取当前线程的调用者堆栈,在调用者堆栈中识别出调度该初始日志的目标堆栈跟踪对象,并根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将初始日志和上下文信息进行拼接,生成目标日志,使得目标日志提供了上层调度者关联的能力,从而大大提升日志信息的定位准确率。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本发明实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本发明实施例所提供的任一种日志生成方法中的步骤。例如,该指令可以执行如下步骤:
在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码,运行目标业务逻辑代码,以得到预设日志生成代码对应的初始日志,获取初始日志对应的当前线程的调用者堆栈,该调用者堆栈包括多个堆栈跟踪对象,基于预设堆栈关系,在堆栈跟踪对象中筛选出调度初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,根据目标堆栈跟踪对象,确定初始日志的上下文信息,并将上下文信息和初始日志进行拼接,以生成应用程序的目标日志。
例如,获取待生成日志的应用程序的代码信息,在代码信息中筛选出业务逻辑代码,根据预设插入策略,在业务逻辑代码中确定出需要插入预设日志生成代码的插入位置,基于插入位置,将至少一个预设日志生成代码插入至业务逻辑代码,得到目标业务逻辑代码。运行目标业务逻辑代码,当运行到预设日志生成代码时,生成预设日志生成代码的日志信息,根据日志信息,生成预设日志生成代码对应的初始日志。利用预设的堆栈追踪函数,获取当前线程的函数调度的堆栈跟踪数组对象,从而得到调用者堆栈。调用者堆栈中从栈顶到栈底,包含了多个调用API的调用栈,每一个调用栈就可以看作是一个堆栈跟踪对象。根据预设堆栈关系,确定出调度初始日志的堆栈跟踪对象的栈位置信息,基于栈位置信息,在调用者堆栈中筛选出目标堆栈跟踪对象。获取目标堆栈跟踪对象的属性信息,并将属性信息作为调度初始日志的调度者的调度信息,根据调度信息,确定初始日志的上下文信息,将上下文信息和初始日志进行拼接,生成应用程序的目标日志的打印信息,根据打印信息,打印出应用程序的目标日志。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该计算机可读存储介质中所存储的指令,可以执行本发明实施例所提供的任一种日志生成方法中的步骤,因此,可以实现本发明实施例所提供的任一种日志生成方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
其中,根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述日志生成方面的各种可选实现方式中提供的方法。
以上对本发明实施例所提供的一种日志生成方法、装置和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (15)
1.一种日志生成方法,其特征在于,包括:
在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码;
运行所述目标业务逻辑代码,以得到所述预设日志生成代码对应的初始日志;
获取所述初始日志对应的当前线程的调用者堆栈,所述调用者堆栈包括多个堆栈跟踪对象;
基于预设堆栈关系,在所述堆栈跟踪对象中筛选出调度所述初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象;
根据所述目标堆栈跟踪对象,确定所述初始日志的上下文信息,并将所述上下文信息和初始日志进行拼接,以生成所述应用程序的目标日志。
2.根据权利要求1所述的日志生成方法,其特征在于,所述基于预设堆栈关系,在所述堆栈跟踪对象中筛选出调度所述初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象,包括:
根据所述预设堆栈关系,确定出调度所述初始日志的堆栈跟踪对象的栈位置信息;
基于所述栈位置信息,在所述调用者堆栈中筛选出所述目标堆栈跟踪对象。
3.根据权利要求2所述的日志生成方法,其特征在于,所述根据所述预设堆栈关系,确定出调度所述初始日志的堆栈跟踪对象的栈位置信息,包括:
获取所述调用者堆栈的堆栈层信息,所述堆栈层信息用于指示所述调用者堆栈的堆栈层;
根据所述预设堆栈关系,在所述堆栈层信息中确定出调度所述初始日志的堆栈跟踪对象对应的目标堆栈层;
将所述目标堆栈层在所述调用者堆栈中的位置信息作为调度所述初始日志的堆栈跟踪对象的栈位置信息。
4.根据权利要求3所述的日志生成方法,其特征在于,所述根据所述预设堆栈关系,在所述堆栈层信息中确定出调度所述初始日志的堆栈跟踪对象对应的目标堆栈层,包括:
在所述堆栈层信息中识别出所述调用者堆栈的至少一个堆栈层;
根据所述预设堆栈关系,确定所述堆栈层对应的对象信息;
基于所述对象信息,在所述堆栈层中筛选出调度所述初始日志的堆栈跟踪对象对应的堆栈层,得到所述目标堆栈层。
5.根据权利要求1所述的日志生成方法,其特征在于,所述根据所述目标堆栈跟踪对象,确定所述初始日志的上下文信息,包括:
获取所述目标堆栈跟踪对象的属性信息,并将所述属性信息作为调度所述初始日志的调度者的调度信息;
根据所述调度信息,确定所述初始日志的上下文信息。
6.根据权利要求5所述的日志生成方法,其特征在于,所述根据所述调度信息,确定所述初始日志的上下文信息,包括:
对所述调度信息进行分类,并按照分类结果将所述调度信息转化为字符串信息,得到多个类型的字符串信息;
根据预设拼接规则,将所述多个类型的字符串信息进行拼接,得到所述初始日志的上下文信息。
7.根据权利要求1所述的日志生成方法,其特征在于,所述将所述上下文信息和初始日志进行拼接,以生成所述应用程序的目标日志,包括:
将所述上下文信息和初始日志进行拼接,生成所述应用程序的目标日志的打印信息;
根据所述打印信息,打印出所述应用程序的目标日志。
8.根据权利要求7所述的日志生成方法,其特征在于,所述将所述上下文信息和初始日志进行拼接,生成所述应用程序的目标日志的打印信息,包括:
在所述初始日志中确定出用于拼接所述上下文信息的拼接位置;
根据所述拼接位置,将所述上下文信息和初始日志进行拼接,得到拼接后初始日志;
根据所述拼接后初始日志,生成所述应用程序的目标日志的打印信息。
9.根据权利要求8所述的日志生成方法,其特征在于,所述根据所述拼接后初始日志,生成所述应用程序的目标日志的打印信息,包括:
获取日志封装信息的存储路径;
根据所述存储路径,将所述拼接后初始日志添加至所述日志封装信息,得到所述应用程序的目标日志的打印信息。
10.根据权利要求7所述的日志生成方法,其特征在于,所述根据所述打印信息,打印出所述应用程序的目标日志,包括:
根据所述打印信息,确定所述目标日志的打印参数;
基于所述打印参数,对所述打印信息进行打印,得到所述应用程序的目标日志。
11.根据权利要求1所述的日志生成方法,其特征在于,所述运行所述目标业务逻辑代码,以得到所述预设日志生成代码对应的初始日志,包括:
运行所述目标业务逻辑代码;
当运行到所述预设日志生成代码时,生成所述预设日志生成代码的日志信息;
根据所述日志信息,生成所述预设日志生成代码对应的初始日志。
12.根据权利要求11所述的日志生成方法,其特征在于,所述根据所述日志信息,生成所述预设日志生成代码对应的初始日志,包括:
采用预设封装方式,对所述日志信息进行封装,得到日志封装信息;
在所述日志封装信息中提取出所述预设日志生成代码对应的初始日志。
13.根据权利要求1所述的日志生成方法,其特征在于,所述在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码,包括:
获取待生成日志的应用程序的代码信息,在所述代码信息中筛选出业务逻辑代码;
根据预设插入策略,在所述业务逻辑代码中确定出需要插入所述预设日志生成代码的插入位置;
基于所述插入位置,将至少一个所述预设日志生成代码插入至所述业务逻辑代码,得到目标业务逻辑代码。
14.一种日志生成装置,其特征在于,包括:
插入单元,用于在应用程序的业务逻辑代码中插入至少一个预设日志生成代码,得到目标业务逻辑代码;
运行单元,用于运行所述目标业务逻辑代码,以得到所述预设日志生成代码对应的初始日志;
获取单元,用于获取所述初始日志对应的当前线程的调用者堆栈,所述调用者堆栈包括多个堆栈跟踪对象;
筛选单元,用于基于预设堆栈关系,在所述堆栈跟踪对象中筛选出调度所述初始日志的堆栈跟踪对象,得到目标堆栈跟踪对象;
生成单元,用于根据所述目标堆栈跟踪对象,确定所述初始日志的上下文信息,并将所述上下文信息和初始日志进行拼接,以生成所述应用程序的目标日志。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至13任一项所述的日志生成方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011329469.1A CN114546793A (zh) | 2020-11-24 | 2020-11-24 | 一种日志生成方法、装置和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011329469.1A CN114546793A (zh) | 2020-11-24 | 2020-11-24 | 一种日志生成方法、装置和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114546793A true CN114546793A (zh) | 2022-05-27 |
Family
ID=81660418
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011329469.1A Pending CN114546793A (zh) | 2020-11-24 | 2020-11-24 | 一种日志生成方法、装置和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114546793A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116107524A (zh) * | 2023-04-13 | 2023-05-12 | 杭州朗和科技有限公司 | 低代码应用日志处理方法、介质、装置和计算设备 |
-
2020
- 2020-11-24 CN CN202011329469.1A patent/CN114546793A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116107524A (zh) * | 2023-04-13 | 2023-05-12 | 杭州朗和科技有限公司 | 低代码应用日志处理方法、介质、装置和计算设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11403536B2 (en) | System and method for anti-pattern detection for computing applications | |
CN109885624A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN112732949B (zh) | 一种业务数据的标注方法、装置、计算机设备和存储介质 | |
CN108134812A (zh) | 数据处理方法和装置 | |
CN112085019A (zh) | 字符识别模型生成系统、方法、装置和计算机设备 | |
CN115168166A (zh) | 业务数据变更的记录方法、装置、设备及存储介质 | |
CN111651140A (zh) | 基于工作流的服务方法及装置 | |
CN114356257A (zh) | 日志打印方法、装置、计算机设备、存储介质和程序产品 | |
CN114546793A (zh) | 一种日志生成方法、装置和计算机可读存储介质 | |
CN112650804A (zh) | 大数据接入方法、装置、系统及存储介质 | |
US20090112704A1 (en) | Management tool for efficient allocation of skills and resources | |
CN115168848B (zh) | 基于大数据分析拦截的拦截反馈处理方法 | |
CN111988429A (zh) | 算法调度方法以及系统 | |
CN112817782B (zh) | 一种数据采集上报方法、装置、电子设备和存储介质 | |
US20230236922A1 (en) | Failure Prediction Using Informational Logs and Golden Signals | |
CN115712571A (zh) | 一种交互服务测试、装置、计算机设备及存储介质 | |
CN114911479A (zh) | 基于配置化的界面生成方法、装置、设备及存储介质 | |
CN114579136A (zh) | 代码处理方法、装置、计算机设备和存储介质 | |
US20170286195A1 (en) | Information object system | |
CN111158654A (zh) | 算法调用方法、装置、服务器及存储介质 | |
CN110417978A (zh) | 菜单配置方法、装置、设备及存储介质 | |
CN110736920A (zh) | 一种基于工程管理测试脚本的卡片测试方法及系统 | |
CN113935301B (zh) | 一种报表生成方法及装置、存储介质及电子设备 | |
CN117407279A (zh) | 软件成分地图生成方法及其相关设备 | |
CN116991715A (zh) | 一种生成测试数据的方法、装置和服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |