CN117891695A - 一种日志记录方法、装置、电子设备及存储介质 - Google Patents

一种日志记录方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN117891695A
CN117891695A CN202410290127.5A CN202410290127A CN117891695A CN 117891695 A CN117891695 A CN 117891695A CN 202410290127 A CN202410290127 A CN 202410290127A CN 117891695 A CN117891695 A CN 117891695A
Authority
CN
China
Prior art keywords
log
thread
codes
generation
interface
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.)
Granted
Application number
CN202410290127.5A
Other languages
English (en)
Other versions
CN117891695B (zh
Inventor
刘松枝
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Technologies Co Ltd
Original Assignee
New H3C Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by New H3C Technologies Co Ltd filed Critical New H3C Technologies Co Ltd
Priority to CN202410290127.5A priority Critical patent/CN117891695B/zh
Publication of CN117891695A publication Critical patent/CN117891695A/zh
Application granted granted Critical
Publication of CN117891695B publication Critical patent/CN117891695B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
    • G06F11/3093Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例提供了一种日志记录方法、装置、电子设备及存储介质,涉及计算机技术领域,该方法包括:运行第一线程,以执行业务代码;在第一线程的数量为多个时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码,每个第一线程对应的一组日志生成代码中日志生成代码的排列顺序与日志生成代码的生成顺序相同;在第一线程运行完成后,分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象;将第一日志对象记录在日志文件中。应用本申请实施例提供的技术方案,能够提高日志展示的正确性,解决在运行多线程来执行业务代码的模式下日志文件无法正常使用的问题。

Description

一种日志记录方法、装置、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种日志记录方法、装置、电子设备及存储介质。
背景技术
日志在计算机系统和软件开发中起着重要的作用,开发人员可以根据设备展示的日志来定位错误位置,分析问题原因,帮助快速排查和解决问题。设备的线程在执行业务代码的过程中生成日志,按照日志生成的先后顺序,将日志记录在日志文件中。
在实际应用中,运行线程,以执行业务代码的模式包括单线程模式和多线程模式。在单线程模式下,按照日志生成的先后顺序,将日志写入日志文件中,设备可以正常展示日志文件中记录的日志,进而完成错误位置定位、问题原因分析等。而在多线程模式下,若按照日志生成的先后顺序,将日志写入日志文件中,则在日志文件中多个线程生成的日志会出现交错,这就导致日志展示混乱,开发人员无法正常使用日志文件,无法完成错误位置定位、问题原因分析等。
发明内容
本申请实施例的目的在于提供一种日志记录方法、装置、电子设备及存储介质,以提高日志展示的正确性,解决在运行多线程来执行业务代码的模式下日志文件无法正常使用的问题。具体技术方案如下:
第一方面,本申请实施例提供了一种日志记录方法,所述方法包括:
运行第一线程,以执行业务代码;
在第一线程的数量为多个时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码,每个第一线程对应的一组日志生成代码中日志生成代码的排列顺序与日志生成代码的生成顺序相同;
在第一线程运行完成后,分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象;
将所述第一日志对象记录在日志文件中。
在一些实施例中,所述获取在第一线程运行过程中每个第一线程生成的一组日志生成代码的步骤,包括:
按照日志生成代码的生成顺序,将在第一线程运行过程中每个第一线程生成的日志生成代码写入预设缓存队列;
按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码,并按照线程对读取的日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码。
在一些实施例中,所述按照日志生成代码的生成顺序,将在第一线程运行过程中每个第一线程生成的日志生成代码写入预设缓存队列的步骤,包括:
按照日志生成代码的生成顺序,获取在第一线程运行过程中第一接口生成的第一日志生成代码,以及第二接口生成的第二日志生成代码,所述第一接口和所述第二接口属于不同的第一线程,在运行所述第二接口完成后运行所述第一接口;
在将所述第二日志生成代码写入预设缓存队列后,将所述第一日志生成代码写入所述预设缓存队列。
在一些实施例中,所述方法还包括:
检测所述第二日志生成代码是否写入预设缓存队列;若否,则将所述第一接口对应的第一标志位置为第一预设值;若是,则将所述第一接口对应的第一标志位置为第二预设值;
所述在将所述第二日志生成代码写入预设缓存队列后,将所述第一日志生成代码写入所述预设缓存队列的步骤,包括:
在所述第一标志位为所述第一预设值时,阻塞所述第一日志生成代码写入预设缓存队列;在所述第一标志位为所述第二预设值时,将所述第一日志生成代码写入预设缓存队列。
在一些实施例中,所述按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码的步骤,包括:
在将第一线程对应的日志生成代码写入所述预设缓存队列完成后,按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码;或
在第一线程运行时,运行第二线程,以读取所述预设缓存队列中记录的日志生成代码。
在一些实施例中,所述预设缓存队列中的每条记录包括第一线程的标识和该第一线程对应的日志生成代码。
在一些实施例中,所述分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象的步骤,包括:
运行第三线程,以依次执行每组日志生成代码,得到每个第一线程对应的日志对象。
在一些实施例中,所述分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象的步骤,包括:
采用修饰器对每组日志生成代码进行结构化修饰,得到每个第一线程对应的第一日志对象。
在一些实施例中,所述方法还包括:
在第一线程的数量为多个时,将第二标志位置为第三预设值;
在第一线程的数量为一个时,将第二标志位置为第四预设值;
所述在第一线程的数量为多个时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码的步骤,包括:
在所述第二标志位为所述第三预设值时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码。
在一些实施例中,所述方法还包括:
在所述第二标志位为所述第四预设值时,执行在第一线程运行过程中生成的日志生成代码,得到第二日志对象;
将所述第二日志对象记录在日志文件中。
第二方面,本申请实施例提供了一种日志记录装置,所述装置包括:
业务模块,用于运行第一线程,以执行业务代码;
日志模块,用于在第一线程的数量为多个时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码,每个第一线程对应的一组日志生成代码中日志生成代码的排列顺序与日志生成代码的生成顺序相同;在第一线程运行完成后,分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象;将所述第一日志对象记录在日志文件中。
在一些实施例中,所述日志模块,具体用于:
按照日志生成代码的生成顺序,将在第一线程运行过程中每个第一线程生成的日志生成代码写入预设缓存队列;
按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码,并按照线程对读取的日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码。
在一些实施例中,所述日志模块,具体用于:
按照日志生成代码的生成顺序,获取在第一线程运行过程中所述第一接口生成的第一日志生成代码,以及所述第二接口生成的第二日志生成代码,所述第一接口和所述第二接口属于不同的第一线程,在运行所述第二接口完成后运行所述第一接口;
在将所述第二日志生成代码写入预设缓存队列后,将所述第一日志生成代码写入所述预设缓存队列。
在一些实施例中,所述日志模块,还用于检测所述第二日志生成代码是否写入预设缓存队列;若否,则将所述第一接口对应的第一标志位置为第一预设值;若是,则将所述第一接口对应的第一标志位置为第二预设值;
所述日志模块,具体用于在所述第一标志位为所述第一预设值时,阻塞所述第一日志生成代码写入预设缓存队列;在所述第一标志位为所述第二预设值时,将所述第一日志生成代码写入预设缓存队列。
在一些实施例中,所述日志模块,具体用于:
在将第一线程对应的日志生成代码写入所述预设缓存队列完成后,按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码;或
在第一线程运行时,运行第二线程,以读取所述预设缓存队列中记录的日志生成代码。
在一些实施例中,所述预设缓存队列中的每条记录包括第一线程的标识和该第一线程对应的日志生成代码。
在一些实施例中,所述日志模块,具体用于运行第三线程,以依次执行每组日志生成代码,得到每个第一线程对应的日志对象。
在一些实施例中,所述日志模块,具体用于采用修饰器对每组日志生成代码进行结构化修饰,得到每个第一线程对应的第一日志对象。
在一些实施例中,所述日志模块,还用于在第一线程的数量为多个时,将第二标志位置为第三预设值;在第一线程的数量为一个时,将第二标志位置为第四预设值;
所述日志模块,具体用于在所述第二标志位为所述第三预设值时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码。
在一些实施例中,所述日志模块,还用于在所述第二标志位为所述第四预设值时,执行在第一线程运行过程中生成的日志生成代码,得到第二日志对象;将所述第二日志对象记录在日志文件中。
第三方面,本申请实施例提供了一种电子设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器被所述机器可执行指令促使:实现任一所述的日志记录方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现任一所述的日志记录方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的日志记录方法。
本申请实施例有益效果:
本申请实施例提供的技术方案中,在运行多个第一线程来执行业务代码时,并不生成日志,只是记录下日志生成代码,并按照线程对日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码。在多个第一线程运行完成后,针对一个第一线程对应一组日志生成代码,执行该组日志生成代码,可以得到该第一线程对应的所有日志对象。将每个第一线程对应所有日志对象记录在日志文件中。由于在一个第一线程对应的所有日志对象生成的过程中不会交错的去生成其他第一线程对应的所有日志对象,也就是,一个第一线程对应的所有日志对象是一次性生成并写入日志文件中,因此,日志文件中多个线程生成的日志不会出现交错,提高了日志展示的正确性,解决了在运行多线程来执行业务代码的模式下日志文件无法正常使用的问题。
当然,实施本申请的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
图1为本申请实施例提供的日志记录方法的第一种流程示意图;
图2为本申请实施例提供的日志生成代码分组的一种示意图;
图3为本申请实施例提供的多组日志生成代码的执行顺序的一种示意图;
图4为本申请实施例提供的日志记录方法的第二种流程示意图;
图5为本申请实施例提供的日志生成代码入列的一种示意图;
图6为本申请实施例提供的修饰器实现流程的一种示意图;
图7为本申请实施例提供的日志记录方法的第三种流程示意图;
图8为本申请实施例提供的日志记录装置的一种结构示意图;
图9为本申请实施例提供的电子设备的一种结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本申请保护的范围。
日志在计算机系统和软件开发中起着重要的作用,是软件开发中常用的一种功能,用于记录和跟踪系统的运行状态、错误、警告和其他有用的信息。以自动化测试举例,日志可以记录测试用例的描述、测试步骤描述以及测试步骤中调用接口的接口描述信息、输入参数、输出参数和执行接口过程中产生的各个级别的辅助定位信息等。这里的接口可以理解为函数。一旦业务代码的执行结果不符合预期时,开发人员可以根据日志来定位错误位置,分析问题原因,帮助快速排查和解决问题。
层级分明的日志结构相比于平铺直叙的日志结构更有利于用户快速定位。一般情况下,根据日志生成的先后顺序,将日志记录在日志文件中。这样,即使日志中存在层级嵌套也不会影响日志展示的正确性。
在实际应用中,运行线程以执行业务代码的模式包括单线程模式和多线程模式。在单线程模式下,按照日志生成的先后顺序,将日志写入日志文件中,设备可以正常展示日志文件中记录的日志,进而完成错误位置定位、问题原因分析等。在多线程模式下,若按照日志生成的先后顺序,将日志写入日志文件中,则在日志文件中多个线程生成的日志会出现交错,这就导致日志展示混乱,开发人员无法正常使用日志文件,无法完成错误位置定位、问题原因分析等。
为解决上述问题,本申请实施例提供了一种日志记录方法。该日志记录方法可以应用于服务器、个人电脑、移动终端或集群的设备。为便于描述,下面均以电子设备为执行主体进行说明,并不起限定作用。如图1所示,该日志记录方法包括如下步骤。
步骤S11,运行第一线程,以执行业务代码;
步骤S12,在第一线程的数量为多个时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码,每个第一线程对应的一组日志生成代码中日志生成代码的排列顺序与日志生成代码的生成顺序相同;
步骤S13,在第一线程运行完成后,分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象;
步骤S14,将第一日志对象记录在日志文件中。
本申请实施例提供的技术方案中,在运行多个第一线程来执行业务代码时,并不生成日志,只是记录下日志生成代码,并按照线程对日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码。在多个第一线程运行完成后,针对一个第一线程对应一组日志生成代码,执行该组日志生成代码,可以得到该第一线程对应的所有日志对象。将每个第一线程对应所有日志对象记录在日志文件中。由于在一个第一线程对应的所有日志对象生成的过程中不会交错的去生成其他第一线程对应的所有日志对象,也就是,一个第一线程对应的所有日志对象是一次性生成并写入日志文件中,因此,日志文件中多个线程生成的日志不会出现交错,提高了日志展示的正确性,解决了在运行多线程来执行业务代码的模式下日志文件无法正常使用的问题。
在上述步骤S11中,业务代码为实现某种业务的代码,业务代码可以划分为一个或多个接口。第一线程为执行业务代码的任一线程。为便于描述,本申请实施例中,将执行业务代码的线程统称为第一线程。第一线程的数量可以为一个或多个。电子设备运行第一线程,进而第一线程执行业务代码。
当第一线程的数量为多个时,电子设备的运行线程模式为多线程模式,每个第一线程执行部分业务代码,多个第一线程完成全部业务代码的执行;当第一线程的数量为一个时,电子设备的运行线程模式为单线程模式,这一个第一线程执行全部业务代码。
在上述步骤S12中,日志生成代码为用于生成日志对象的代码,执行一条日志生成代码可以生成一个日志对象。日志对象为实例化后的日志,日志对象可以为文件对象,即日志对象可以直接写入日志文件中的文件对象;日志对象也可以为中间数据,也就是,日志对象需要转换为字符串(如文件对象)后再写入日志文件。
日志生成代码可以包括但不限于:对接口执行前对接口的接口描述、输入参数的日志生成代码,接口执行过程中辅助定位信息的日志生成代码,接口执行完成后对接口的输出参数的日志生成代码等。
本申请实施例中,电子设备在运行第一线程的过程中第一线程可以产生多条日志生成代码。在第一线程的数量为多个时,也就是多线程模式下,电子设备获取在多个第一线程运行过程中生成的日志生成代码。
为便于后续的日志生成代码分组,电子设备可以采用数据库或缓存队列,以线程的标识和日志生成代码为一组值的形式,记录所获取的日志生成代码。为保证日志文件中记录的日志的顺序准确性,日志生成代码的记录顺序与日志生成代码的生成顺序(即获取顺序)相同,或者,在以线程的标识和日志生成代码为一组值中增加生成时间,记录所获取的日志生成代码。
例如,执行业务代码的线程包括线程1和线程2。在线程1运行过程中,生成的日志生成代码包括代码11和代码12;在线程2运行过程中,生成的日志生成代码包括代码21和代码22。代码11、代码12、代码21和代码22的生成顺序为代码11®代码21®代码22®代码12,代码11的生成时间为时间1,代码21的生成时间为时间2,代码22的生成时间为时间3,代码12的生成时间为时间4。
电子设备可以记录日志生成代码为:{线程1,代码11},{线程2,代码21},{线程2,代码22},{线程1,代码12}。或者,电子设备可以记录日志生成代码为:{线程1,代码11,时间1},{线程2,代码21,时间2},{线程2,代码22,时间3},{线程1,代码12,时间4}。
本申请实施例中,对日志生成代码的记录方式不进行限定。
对于所获取的日志生成代码,电子设备可以按照线程对获取的日志生成代码进行分组,得到每个第一线程生成的一组日志生成代码。
例如,以日志生成代码记录在缓存队列中为例,如图2所示,缓存队列中记录的线程X表示线程的标识,X=1~3,接口11Y、接口12Y、接口21Y、接口22Y、接口31Y、接口32Y分别表示日志生成代码,Y=0~2等,Y的数值越大,表示生成的时间越晚。电子设备按照线程对日志生成代码进行分组保存,得到如图2中右侧所示的分组结果,每一行的日志生成代码对应一个线程。
本申请实施例中,分组后得到的每组日志生成代码可以用字典进行保存,该字典的键为第一线程的标识,该字典的值为对应的日志生成代码列表,该日志生成代码列表中记录第一线程对应的一组日志生成代码。本申请实施例中,电子设备还可以采用其他方式保存分组后得到的每组日志生成代码,对此不进行限定。
在上述步骤S13中,在多个第一线程运行完成后,多个第一线程生成的日志生成代码也全部获取完成,相应的,每个第一线程对应的一组日志生成代码包括了该第一线程生成的全部日志生成代码。
在多个第一线程运行完成后,针对每组日志生成代码,电子设备执行该组日志生成代码,得到该组日志生成代码对应的局部日志对象,如第一日志对象。
仍以图2为例进行说明。电子设备可以执行线程1对应的一组日志生成代码,得到线程1对应的多条第一日志对象,执行线程2对应的一组日志生成代码,得到线程2对应的多条第一日志对象,执行线程3对应的一组日志生成代码,得到线程3对应的多条第一日志对象。
在一些实施例中,为了提高日志对象的生成效率,电子设备可以启用多个第三线程,第三线程和第一线程一一对应,一个第三线程执行对应的第一线程生成的一组日志生成代码,并在得到该第一线程对应的所有第一日志对象后,将该第一线程对应的所有第一日志对象写入日志文件中。
在一些实施例中,为避免多个第三线程运行导致多线程对应的日志对象记录混乱,电子设备可以运行一个第三线程,以依次执行每组日志生成代码,得到每个第一线程对应的日志对象。例如图3所示的多组日志生成代码的执行顺序,电子设备运行第三线程,先执行线程1对应的一组日志生成代码,并将生成的日志对象写入日志文件中,再执行线程2对应的一组日志生成代码,并将生成的日志对象写入日志文件中,之后执行线程3对应的一组日志生成代码,并将生成的日志对象写入日志文件中。
本申请实施例中,电子设备将多线程模式的日志记录类似地转换成了单线程模式的日志记录,避免了日志记录混乱的问题。
在上述步骤S14中,当第一日志对象为文件对象时,电子设备直接将第一日志对象记录在日志文件中。当第一日志对象为中间数据时,电子设备可以将日志对象转换为字符串(如文件对象)后,将转换得到的字符串写入日志文件。
在一些实施例中,电子设备可以预先设置缓存队列,即预设缓存队列。该预设缓存队列为先入先出(First Input First Output,FIFO)队列。基于预设缓存队列,本申请实施例提供了一种日志记录方法,如图4所示,可以包括如下步骤。
步骤S41,运行第一线程,以执行业务代码。步骤S41与上述步骤S11相同。
步骤S42,在第一线程的数量为多个时,按照日志生成代码的生成顺序,将在第一线程运行过程中每个第一线程生成的日志生成代码写入预设缓存队列。
在多线程模式下,多个第一线程在运行过程中,不断生成日志生成代码,每生成一条日志生成代码,电子设备就将该日志生成代码写入预设缓存队列,如图2所示,以线程的标识和日志生成代码为一组值写入预设缓存队列。
步骤S43,按照先入先出的规则,读取预设缓存队列中记录的日志生成代码,并按照线程对读取的日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码;每个第一线程对应的一组日志生成代码中日志生成代码的排列顺序与日志生成代码的生成顺序相同。
电子设备按照先入先出的规则,读取预设缓存队列中记录的日志生成代码。在读取预设缓存队列中记录的日志生成代码时,电子设备可以获取所读取的日志生成代码对应的第一线程的标识。进而电子设备基于第一线程的标识,可以按照线程对读取的日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码,如图2所示。
本申请实施例中,电子设备可以通过如下任一种方式,读取预设缓存队列中记录的日志生成代码。
方式一,在将第一线程对应的日志生成代码写入预设缓存队列完成后,按照先入先出的规则,读取预设缓存队列中记录的日志生成代码。
该方式一中,读取日志生成代码的时机为多个第一线程生成的日志生成代码写入预设缓存队列完成后。这种方式适用于日志生成代码较少的情况,可以在占用中央处理器(Central Processing Unit,CPU)资源情况下,快速完成日志生成代码的读取,进而准确执行步骤S44,完成日志生成代码分组。
方式二,在第一线程运行时,运行第二线程,以读取预设缓存队列中记录的日志生成代码。
该方式二中,读取日志生成代码的时机为多个第一线程生成的日志生成代码写入预设缓存队列过程中,也就是,运行第一线程的同时读取日志生成代码。第二线程为读取预设缓存队列中记录的日志生成代码的线程。
在运行多个第一线程的同时,电子设备额外启用一个第二线程,第二线程读取预设缓存队列中记录的日志生成代码,进而执行步骤S44,完成日志生成代码分组。采用方式二,由于缓存队列具有先进先出的特征,可以保证分组后日志生成代码按照获取的先后顺序读取以及排列,进而保证了生成日志对象时日志生成代码按照获取的先后顺序执行,保证日志内容的顺序性;另外,电子设备可以及时读取出缓存队列中的内容,减少缓存队列的内存占用。这种方式适用于日志生成代码较多的情况。
步骤S44,在第一线程运行完成后,分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象。步骤S44与上述步骤S13相同。
步骤S45,将第一日志对象记录在日志文件中;步骤S45与上述步骤S14相同。
本申请实施例中,缓存队列可以严格地按照日志生成代码的生成先后顺序记录日志生成代码,即使当前是多个第一线程生成的日志生成代码穿插保存的,后续对队列中的日志生成代码进行分组也可以保证每个第一线程生成的日志生成代码的先后顺序正确,进一步提高了日志记录的准确性,提高了日志展示的正确性。
在一些实施例中,线程的接口间存在数据共享的问题,如一个第一线程中的接口(如第一接口)与另一个第一线程中的接口(如第二接口)间存在数据共享,第一接口在第二接口运行完成后运行,在运行第二接口完成后运行第一接口,这种情况下,上步骤S42可以为:按照日志生成代码的生成顺序,获取在第一线程运行过程中第一接口生成的第一日志生成代码,以及第二接口生成的第二日志生成代码;在将第二日志生成代码写入预设缓存队列后,将第一日志生成代码写入预设缓存队列。
这里,电子设备可能先获取到第一日志生成代码,再获取到第二日志生成代码,也可能先获取到第二日志生成代码,再获取到第一日志生成代码,对此不进行限定。无论是先获取到第一日志生成代码,还是先获取到第二日志生成代码,均是第二日志生成代码先入列,第一日志生成代码后入列,即电子设备均是先将第二日志生成代码写入预设缓存队列,再将第一日志生成代码写入预设缓存队列。这实现了因数据共享而存在多个线程接口的执行先后关系的日志记录,进一步确保了日志记录的准确性,提高了日志展示的正确性。
例如图5所示的日志生成代码入列示意图。图5中,线程1包括接口11和接口12,线程2包括接口21和接口22,线程3包括接口31和接口32。接口11的日志生成代码包括接口110、接口111和接口112,接口110表示对接口执行前对接口的接口描述、输入参数的日志生成代码,接口111表示接口11执行过程中辅助定位信息的日志生成代码,接口112表示接口11执行完成后对接口11的输出参数的日志生成代码。其他接口的日志生成代码入的含义与接口11的日志生成代码的含义相似,此次不再赘述。图5中线程3中的接口31与线程2中的接口21间存在数据共享,接口21在接口31执行完成之后执行,也就是,在接口312代码写缓存队列后,接口210代码才能写入缓存队列。
在一些实施例中,为了提高代码入列顺序管理的便利性,电子设备可以设置第一标志位,第一标志位用于标识存在数据共享的接口中需要阻塞的接口,第一标志位的位宽可以根据实际需求进行设定。第一标志位的值可以为第一预设值或第二预设值,第一预设值用于指示阻塞对应的接口的日志生成代码入列,第二预设值用于指示允许对应的接口的日志生成代码入列。第一预设值和第二预设值的具体内容可以根据实际需求进行设定,例如,第一标志位的位宽为1位(bit),第一预设值为1,第二预设值为0;或,第一预设值为0,第二预设值为1。
以第一接口在第二接口运行完成后运行为例,基于第一标志位,电子设备可以检测第二日志生成代码是否写入预设缓存队列;若否,则将第一接口对应的第一标志位置为第一预设值;若是,则将第一接口对应的第一标志位置为第二预设值。
这种情况下,上述在将第二日志生成代码写入预设缓存队列后,将第一日志生成代码写入预设缓存队列的步骤,具体可以为:在第一标志位为第一预设值时,阻塞第一日志生成代码写入预设缓存队列;在第一标志位为第二预设值时,将第一日志生成代码写入预设缓存队列。
仍以图5为例进行说明。第一预设值为0,第二预设值为1。电子设备为接口21设置一个标志位1(即第一标志位。在接口312代码写缓存队列前,标志位1的值为0,说明接口31未执行完成,电子设备阻塞接口210代码写入缓存队列;在接口312代码写缓存队列后,标志位1的值置为1,说明接口31执行完成,电子设备不再阻塞接口210代码写入缓存队列,将接口210代码写入缓存队列。
本申请实施例中,电子设备通过设置一个标志位,精确地完成了存在线程的接口间存在数据共享时接口执行顺序的管理,进一步确保了后续日志记录和展示的准确性。
在一些实施例中,一个第一线程包括多个接口,这多个接口间存在包含关系或者并列关系。为了在日志文件中体现出接口间的包含关系或者并列关系,电子设备可以配置修饰器,该修饰器用于修改需要进行日志记录的接口。基于此,上述步骤S14可以为:采用修饰器对每组日志生成代码进行结构化修饰,得到每个第一线程对应的第一日志对象。此时得到的日志对象能够提出接口间存在包含关系或者并列关系。
本申请实施例中,电子设备在经修饰器修饰的接口的位置,对该接口的接口描述、输入参数、输出参数以及执行过程信息等用户自定义信息进行日志记录,保证了需要记录的这些接口的辅助定位信息记录到文件中,并能够提出接口间存在包含关系或者并列关系。
下面结合图6所示的修饰器实现流程对修饰器进行解释说明。修饰对接口的修饰流程可以分为三个阶段,即初始当前节点对象阶段、生成日志阶段和回退当前节点对象阶段。
1)初始当前节点对象阶段。
电子设备判断当前节点对象(C_NODE)是否为空(None);如果为空,则将根节点对象(ROOT)赋值给父节点对象(P_NODE),并以接口名和随机数为标签名(tag),生成根节点对象(ROOT)的子节点对象为当前节点对象(C_NODE);如果不为空,则将当前节点对象(C_NODE)赋值给父节点对象(P_NODE),并以接口名和随机数为标签名,生成父节点对象(P_NODE)的子节点对象为当前节点对象(C_NODE);此外,依据标签名,保存当前节点对象(C_NODE)(即子节点对象)与父节点对象(P_NODE)的关系。
2)生成日志阶段。
电子设备在接口执行前、接口执行期间以及接口执行后的操作中产生的日志对象可以以标签和标签值(即键值对)为子节点对象,向当前节点对象(C_NODE)中添加:当前节点对象(C_NODE)创建完毕,开始执行接口执行前的操作,记录的子节点对象包括但不限于接口描述、接口输入参数以及接口开始执行时间等;之后执行接口执行期间的操作,记录的子节点对象包括但不限于接口执行过程信息、信息等级及信息产生时间等;再之后执行接口执行完成的操作,记录的子节点对象包括但不限于接口输出参数、接口结束执行时间以及接口执行耗时等。上述键值对中,键可以为上述接口名和随机数形成的标签名,值为需要记录的信息。
3)回退当前节点对象阶段。
电子设备将父节点对象(P_NODE)赋值给当前节点对象(C_NODE),然后,根据记录的父节点对象与子节点对象的关系,给父节点对象(P_NODE)赋值,标志当前接口的日志记录完成。
上述修饰器对接口修饰完成了结构化的日志记录,是的记录的日志能够提出接口间的并列关系和包含关系。例如,电子设备使用了接口1和接口2,并且接口1中调用了接口3,则使用修饰器记录的日志可完成:记录接口1和接口2的日志为并列关系,同时记录接口1中包含接口3的日志。
本申请实施例中,为了体现日志数据的层级结构,日志文件可以采用能够体现层次的数据结构进行记录,例如xml、yaml或者json等。这种日志文件可以用于记录接口描述、输入参数、输出参数以及执行过程信息,同时还可以用于记录各接口间并列关系或包含关系。
在一些实施例中,当第一线程的数量为一个时,也就是单线程模式时,不存在多个线程生成的日志交错的问题,电子设备可以同时执行业务代码以及日志生成代码,也就是,在第一线程运行过程中执行第一线程生成的日志生成代码,生成日志对象,如第二日志对象,待业务代码执行完毕后,第二日志对象记录完毕,进而将第二日志对象记录在日志文件中。这提高了日志文件生成效率。
为了区分单线程模式和多线程模式,以便采用不同的方式准确记录日志,生成日志文件,电子设备可以配置一个标志位,如第二标志位。第二标志位用于当前的线程运行模式,第二标志位的位宽可以根据实际需求进行设定。第二标志位的值可以为第三预设值或第四预设值,第三预设值用于指示当前的线程运行模式为多线程模式,第四预设值用于指示当前的线程运行模式为单线程模式。第三预设值和第四预设值的具体内容可以根据实际需求进行设定,例如,第二标志位的位宽为1位(bit),第三预设值为1,第四预设值为0;或,第三预设值为0,第四预设值为1。
基于第二标志位,上述步骤S12可以为:在第二标志位为第三预设值时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码。
相应的,在第二标志位为第四预设值时,电子设备执行在第一线程运行过程中生成的日志生成代码,得到第二日志对象;将第二日志对象记录在日志文件中。
本申请实施例中,电子设备通过设置一个标志位,精确地完成了线程运行模式的区分,进而便于采用不同的方式准确记录日志,进一步确保了后续日志记录和展示的准确性。
下面结合图7所示的日志记录的流程图,对本申请实施例提供的日志记录方法进行详细说明。电子设备可以配置模版函数。模版函数包含两部分代码,即业务模块执行的业务代码和日志模块执行的日志代码(即日志生成代码)。用户将需要多线程执行的接口及接口入参,按照模版函数要求的格式传入模版函数,这里的接口已被日志模块的修饰器修饰。
业务模块采用多线程模式或单线程模式执行业务代码,直至业务代码执行完毕。
日志模块根据第二标志位,判断是否为多线程模式。
若否,即当前为单线程模式,日志模块与业务模块同步执行,待业务模块执行完毕,日志模块同步完成日志对象的记录,然后将日志对象转换为字符串,并输出到日志文件。
若是,即当前为多线程模式,日志模块按照线程标识与日志生成代码为一组值,并将这以一组值写入缓存队列(如图7中的日志代码记录队列),如图5所示;日志模块按照先入先出的规则,读取缓存队列中的内容,并按线程标识对缓存队列中的日志生成代码进行分组,如图2所示;在日志生成代码分组完成后,即业务模块执行完毕,不会再生成新的日志生成代码,日志模块为一个单线程执行,按照日志生成代码对应的线程,依次执行日志生成代码,如图3所示,完成日志对象的记录,然后将日志对象转换为字符串,并输出到日志文件。
采用本申请实施例提供的技术方案,电子设备生成的日志文件中多个线程生成的日志不会出现交错,提高了日志展示的正确性,解决了在运行多线程来执行业务代码的模式下日志文件无法正常使用的问题。此时,电子设备还可以实现对接口描述、输入参数、输出参数和执行过程中打印的各个级别的辅助定位信息等的日志记录,对各个接口间的包含关系或者并列关系的日志记录,以及对多线程模式时线程间因数据共享而存在接口执行先后关系的日志记录。
与上述日志记录方法对应,本申请实施例还提供了一种日志记录装置,如图8所示,该装置包括:
业务模块81,用于运行第一线程,以执行业务代码;
日志模块82,用于在第一线程的数量为多个时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码,每个第一线程对应的一组日志生成代码中日志生成代码的排列顺序与日志生成代码的生成顺序相同;在第一线程运行完成后,分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象;将第一日志对象记录在日志文件中。
在一些实施例中,日志模块82,具体可以用于:
按照日志生成代码的生成顺序,将在第一线程运行过程中每个第一线程生成的日志生成代码写入预设缓存队列;
按照先入先出的规则,读取预设缓存队列中记录的日志生成代码,并按照线程对读取的日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码。
在一些实施例中,日志模块82,具体可以用于按照日志生成代码的生成顺序,获取在第一线程运行过程中第一接口生成的第一日志生成代码,以及第二接口生成的第二日志生成代码,第一接口和第二接口属于不同的第一线程,在运行第二接口完成后运行第一接口;在将第二日志生成代码写入预设缓存队列后,将第一日志生成代码写入预设缓存队列。
在一些实施例中,日志模块82,还可以用于检测第二日志生成代码是否写入预设缓存队列;若否,则将第一接口对应的第一标志位置为第一预设值;若是,则将第一接口对应的第一标志位置为第二预设值;
日志模块82,具体可以用于在第一标志位为第一预设值时,阻塞第一日志生成代码写入预设缓存队列;在第一标志位为第二预设值时,将第一日志生成代码写入预设缓存队列。
在一些实施例中,日志模块82,具体可以用于:
在将第一线程对应的日志生成代码写入预设缓存队列完成后,按照先入先出的规则,读取预设缓存队列中记录的日志生成代码;或
在第一线程运行时,运行第二线程,以读取预设缓存队列中记录的日志生成代码。
在一些实施例中,预设缓存队列中的每条记录包括第一线程的标识和该第一线程对应的日志生成代码。
在一些实施例中,日志模块82,具体可以用于:
运行第三线程,以依次执行每组日志生成代码,得到每个第一线程对应的日志对象。
在一些实施例中,日志模块82,具体可以用于采用修饰器对每组日志生成代码进行结构化修饰,得到每个第一线程对应的第一日志对象。
在一些实施例中,日志模块82,还可以用于在第一线程的数量为多个时,将第二标志位置为第三预设值;在第一线程的数量为一个时,将第二标志位置为第四预设值;
日志模块82,具体可以用于:在第二标志位为第三预设值时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码。
在一些实施例中,日志模块82,还可以用于在第二标志位为第四预设值时,执行在第一线程运行过程中生成的日志生成代码,得到第二日志对象;将第二日志对象记录在日志文件中。
本申请实施例提供的技术方案中,在运行多个第一线程来执行业务代码时,并不生成日志,只是记录下日志生成代码,并按照线程对日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码。在多个第一线程运行完成后,针对一个第一线程对应一组日志生成代码,执行该组日志生成代码,可以得到该第一线程对应的所有日志对象。将每个第一线程对应所有日志对象记录在日志文件中。由于在一个第一线程对应的所有日志对象生成的过程中不会交错的去生成其他第一线程对应的所有日志对象,也就是,一个第一线程对应的所有日志对象是一次性生成并写入日志文件中,因此,日志文件中多个线程生成的日志不会出现交错,提高了日志展示的正确性,解决了在运行多线程来执行业务代码的模式下日志文件无法正常使用的问题。
本申请实施例还提供了一种电子设备,如图9所示,包括处理器91和机器可读存储介质92,所述机器可读存储介质92存储有能够被所述处理器91执行的机器可执行指令,所述处理器91被所述机器可执行指令促使:实现上述任一所述的日志记录方法。
本申请实施例中,电子设备还可以包括通信接和通信总线,其中,处理器91、通信接口和机器可读存储介质92通过通信总线完成相互间的通信。
通信总线可以是外设部件互连标准(Peripheral Component Interconnect,PCI)总线或扩展工业标准结构(Extended Industry Standard Architecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
机器可读存储介质可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,机器可读存储介质还可以是至少一个位于远离前述处理器的存储装置。
处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本申请提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的日志记录方法。
在本申请提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的日志记录方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、存储介质和程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的较佳实施例,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。

Claims (16)

1.一种日志记录方法,其特征在于,所述方法包括:
运行第一线程,以执行业务代码;
在第一线程的数量为多个时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码,每个第一线程对应的一组日志生成代码中日志生成代码的排列顺序与日志生成代码的生成顺序相同;
在第一线程运行完成后,分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象;
将所述第一日志对象记录在日志文件中。
2.根据权利要求1所述的方法,其特征在于,所述获取在第一线程运行过程中每个第一线程生成的一组日志生成代码的步骤,包括:
按照日志生成代码的生成顺序,将在第一线程运行过程中每个第一线程生成的日志生成代码写入预设缓存队列;
按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码,并按照线程对读取的日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码。
3.根据权利要求2所述的方法,其特征在于,所述按照日志生成代码的生成顺序,将在第一线程运行过程中每个第一线程生成的日志生成代码写入预设缓存队列的步骤,包括:
按照日志生成代码的生成顺序,获取在第一线程运行过程中第一接口生成的第一日志生成代码,以及第二接口生成的第二日志生成代码,所述第一接口和所述第二接口属于不同的第一线程,在运行所述第二接口完成后运行所述第一接口;
在将所述第二日志生成代码写入预设缓存队列后,将所述第一日志生成代码写入所述预设缓存队列。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
检测所述第二日志生成代码是否写入预设缓存队列;若否,则将所述第一接口对应的第一标志位置为第一预设值;若是,则将所述第一接口对应的第一标志位置为第二预设值;
所述在将所述第二日志生成代码写入预设缓存队列后,将所述第一日志生成代码写入所述预设缓存队列的步骤,包括:
在所述第一标志位为所述第一预设值时,阻塞所述第一日志生成代码写入预设缓存队列;在所述第一标志位为所述第二预设值时,将所述第一日志生成代码写入预设缓存队列。
5.根据权利要求2所述的方法,其特征在于,所述按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码的步骤,包括:
在将第一线程对应的日志生成代码写入所述预设缓存队列完成后,按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码;或
在第一线程运行时,运行第二线程,以读取所述预设缓存队列中记录的日志生成代码。
6.根据权利要求1所述的方法,其特征在于,所述分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象的步骤,包括:运行第三线程,以依次执行每组日志生成代码,得到每个第一线程对应的日志对象;或
所述分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象的步骤,包括:采用修饰器对每组日志生成代码进行结构化修饰,得到每个第一线程对应的第一日志对象。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在第一线程的数量为多个时,将第二标志位置为第三预设值;
在第一线程的数量为一个时,将第二标志位置为第四预设值;
所述在第一线程的数量为多个时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码的步骤,包括:在所述第二标志位为所述第三预设值时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码;
所述方法还包括:
在所述第二标志位为所述第四预设值时,执行在第一线程运行过程中生成的日志生成代码,得到第二日志对象;
将所述第二日志对象记录在日志文件中。
8.一种日志记录装置,其特征在于,所述装置包括:
业务模块,用于运行第一线程,以执行业务代码;
日志模块,用于在第一线程的数量为多个时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码,每个第一线程对应的一组日志生成代码中日志生成代码的排列顺序与日志生成代码的生成顺序相同;在第一线程运行完成后,分别执行每组日志生成代码,得到每个第一线程对应的第一日志对象;将所述第一日志对象记录在日志文件中。
9.根据权利要求8所述的装置,其特征在于,所述日志模块,具体用于:
按照日志生成代码的生成顺序,将在第一线程运行过程中每个第一线程生成的日志生成代码写入预设缓存队列;
按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码,并按照线程对读取的日志生成代码进行分组,得到每个第一线程对应的一组日志生成代码。
10.根据权利要求9所述的装置,其特征在于,所述日志模块,具体用于:
按照日志生成代码的生成顺序,获取在第一线程运行过程中第一接口生成的第一日志生成代码,以及第二接口生成的第二日志生成代码,所述第一接口和所述第二接口属于不同的第一线程,在运行所述第二接口完成后运行所述第一接口;
在将所述第二日志生成代码写入预设缓存队列后,将所述第一日志生成代码写入所述预设缓存队列。
11.根据权利要求10所述的装置,其特征在于,所述日志模块,还用于检测所述第二日志生成代码是否写入预设缓存队列;若否,则将所述第一接口对应的第一标志位置为第一预设值;若是,则将所述第一接口对应的第一标志位置为第二预设值;
所述日志模块,具体用于在所述第一标志位为所述第一预设值时,阻塞所述第一日志生成代码写入预设缓存队列;在所述第一标志位为所述第二预设值时,将所述第一日志生成代码写入预设缓存队列。
12.根据权利要求9所述的装置,其特征在于,所述日志模块,具体用于:
在将第一线程对应的日志生成代码写入所述预设缓存队列完成后,按照先入先出的规则,读取所述预设缓存队列中记录的日志生成代码;或
在第一线程运行时,运行第二线程,以读取所述预设缓存队列中记录的日志生成代码。
13.根据权利要求8所述的装置,其特征在于,所述日志模块,具体用于运行第三线程,以依次执行每组日志生成代码,得到每个第一线程对应的日志对象;或
所述日志模块,具体用于采用修饰器对每组日志生成代码进行结构化修饰,得到每个第一线程对应的第一日志对象。
14.根据权利要求8所述的装置,其特征在于,所述日志模块,还用于在第一线程的数量为多个时,将第二标志位置为第三预设值;在第一线程的数量为一个时,将第二标志位置为第四预设值;
所述日志模块,具体用于在所述第二标志位为所述第三预设值时,获取在第一线程运行过程中每个第一线程生成的一组日志生成代码;
所述日志模块,还用于在所述第二标志位为所述第四预设值时,执行在第一线程运行过程中生成的日志生成代码,得到第二日志对象;将所述第二日志对象记录在日志文件中。
15.一种电子设备,其特征在于,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器被所述机器可执行指令促使:实现权利要求1-7任一所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-7任一所述的方法。
CN202410290127.5A 2024-03-14 2024-03-14 一种日志记录方法、装置、电子设备及存储介质 Active CN117891695B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410290127.5A CN117891695B (zh) 2024-03-14 2024-03-14 一种日志记录方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410290127.5A CN117891695B (zh) 2024-03-14 2024-03-14 一种日志记录方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN117891695A true CN117891695A (zh) 2024-04-16
CN117891695B CN117891695B (zh) 2024-06-21

Family

ID=90652013

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410290127.5A Active CN117891695B (zh) 2024-03-14 2024-03-14 一种日志记录方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117891695B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111045782A (zh) * 2019-11-20 2020-04-21 北京奇艺世纪科技有限公司 日志处理方法、装置、电子设备和计算机可读存储介质
WO2020233212A1 (zh) * 2019-05-17 2020-11-26 深圳前海微众银行股份有限公司 一种日志记录的处理方法、服务器及存储介质
CN115292148A (zh) * 2022-07-27 2022-11-04 苏州浪潮智能科技有限公司 多线程日志记录方法、系统、电子设备及存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020233212A1 (zh) * 2019-05-17 2020-11-26 深圳前海微众银行股份有限公司 一种日志记录的处理方法、服务器及存储介质
CN111045782A (zh) * 2019-11-20 2020-04-21 北京奇艺世纪科技有限公司 日志处理方法、装置、电子设备和计算机可读存储介质
CN115292148A (zh) * 2022-07-27 2022-11-04 苏州浪潮智能科技有限公司 多线程日志记录方法、系统、电子设备及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
POBEE, E等: "Efficient Transaction-Based Deterministic Replay for Multi-threaded Programs", 《34TH IEEE/ACM INTERNATIONAL CONFERENCE ON AUTOMATED SOFTWARE ENGINEERING》, 31 December 2019 (2019-12-31) *
连仁包;王卫星;: "基于共享内存的松耦合日志系统研究和设计", 计算机应用与软件, no. 06, 15 June 2013 (2013-06-15) *

Also Published As

Publication number Publication date
CN117891695B (zh) 2024-06-21

Similar Documents

Publication Publication Date Title
US9239743B2 (en) Method and architecture for exception and event management in an embedded software system
US20080010497A1 (en) Selecting a Logging Method via Metadata
CN107797933B (zh) 生成模拟报文的方法及装置
US10504492B2 (en) Apparatus and methods for generating dynamic trace data on a GPU
CN110096444A (zh) 一种基于excel生成测试用例的管理系统、使用方法及设备
CN112817866A (zh) 录制回放方法、装置、系统、计算机设备以及存储介质
US20140215483A1 (en) Resource-usage totalizing method, and resource-usage totalizing device
CN112000589A (zh) 一种数据写入方法、数据读取方法、装置及电子设备
CN108733543B (zh) 一种日志分析的方法、装置、电子设备和可读存储介质
CN112711398A (zh) 埋点文件生成方法、装置、设备及存储介质
CN110795920B (zh) 一种文档生成方法及设备
CN109101412B (zh) 测试文件生成、测试方法、装置、存储介质和计算机设备
CN115408391A (zh) 一种数据库表变更方法、装置、设备和存储介质
US20180033115A1 (en) Capturing Commands in a Multi-Engine Graphics Processing Unit
CN112540808A (zh) 一种程序行为层级调用关系的记录方法及相关设备
CN117891695B (zh) 一种日志记录方法、装置、电子设备及存储介质
US20090327995A1 (en) Annotation-aided code generation in library-based replay
JP2009181495A (ja) ジョブ処理システムおよびジョブ管理方法
CN115576685A (zh) 容器的调度方法、装置及计算机设备
US20240256163A1 (en) Data Processing Method and Apparatus for Shared Memory, and Device and Medium
CN110852077B (zh) 动态调整Word2Vec模型词典的方法、装置、介质及电子设备
CN113657084A (zh) 一种自动读取Excel内容的方法及系统
JP2009181494A (ja) ジョブ処理システムおよびジョブ情報取得方法
CN113760696A (zh) 一种程序问题定位方法、装置、电子设备和存储介质
CN113468105A (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
GR01 Patent grant
GR01 Patent grant