CN108509327A - 一种日志输出方法、装置、终端设备和存储介质 - Google Patents
一种日志输出方法、装置、终端设备和存储介质 Download PDFInfo
- Publication number
- CN108509327A CN108509327A CN201810358271.2A CN201810358271A CN108509327A CN 108509327 A CN108509327 A CN 108509327A CN 201810358271 A CN201810358271 A CN 201810358271A CN 108509327 A CN108509327 A CN 108509327A
- Authority
- CN
- China
- Prior art keywords
- round
- pointer
- robin queue
- log information
- written
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及通信技术领域,提出一种日志输出方法、装置、终端设备和计算机存储介质。所述日志输出方法包括:在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息,所述循环队列在系统内存的指定区域中预先构建;通过日志查看工具从所述循环队列中读取并输出日志信息。上述过程通过限制在同一时刻只有一个线程能够写入日志信息,从而无需使用线程同步技术来协调各个线程的正常工作,极大地降低了系统的消耗,能够避免出现软件运行速率下降,影响用户体验的问题。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种日志输出方法、装置、终端设备和计算机存储介质。
背景技术
对于服务商发布给客户的软件,一般会将软件需要输出的调试信息写入一个日志文件,以便定位可能产生的各种问题。
随着软件功能的增多,需要输出的日志文件的内容也越来越多。在软件输出日志的过程中,多个线程会同时往同一个文件写入日志信息,由于需要使用线程同步技术和磁盘读写性能限制来协调多个线程的正常工作,此时会出现软件运行速率下降的情况,影响用户体验。
发明内容
有鉴于此,本发明实施例提供了一种日志输出方法、装置、终端设备和计算机存储介质,旨在解决在软件输出日志的过程中出现的软件运行速率下降,影响用户体验的问题。
本发明实施例的第一方面提供了一种日志输出方法,包括:
在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息,所述循环队列在系统内存的指定区域中预先构建;
通过日志查看工具从所述循环队列中读取并输出日志信息。
本发明实施例的第二方面提供了一种日志输出装置,包括:
日志写入模块,用于在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息,所述循环队列在系统内存的指定区域中预先构建;
日志读取模块,用于通过日志查看工具从所述循环队列中读取并输出日志信息。
本发明实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例的第一方面提供的日志输出方法的步骤。
本发明实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如本发明实施例的第一方面提供的日志输出方法的步骤。
本发明实施例提出的日志输出方法包括:在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息,所述循环队列在系统内存的指定区域中预先构建;通过日志查看工具从所述循环队列中读取并输出日志信息。上述过程通过使用CAS原子操作技术,而不是系统的信号量、互斥锁、事件等线程同步技术来协调各个线程的正常工作,极大地降低了系统的消耗,能够避免出现软件运行速率下降,影响用户体验的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种日志输出方法的第一个实施例的流程图;
图2a是本发明实施例提供的一种日志输出方法的第二个实施例的流程图;
图2b是图2a所示的循环队列的数据写入方法中一种循环队列的结构示意图;
图3是本发明实施例提供的一种日志输出方法的第三个实施例的流程图;
图4是本发明实施例提供的一种日志输出装置的一个实施例的结构图;
图5是本发明实施例提供的一种终端设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
本发明实施例提供了一种日志输出方法、装置、终端设备和计算机存储介质,旨在解决在软件输出日志的过程中出现的软件运行速率下降,影响用户体验的问题。
请参阅图1,本发明实施例中一种日志输出方法的第一个实施例包括:
101、在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息;
在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息,即限制在同一时刻只有一个线程能够写入日志信息,这里的各个线程为软件在输出日志的过程中启动的用于写入日志信息的线程。所述循环队列在系统内存的指定区域中预先构建,具体的,可以开辟一块较大的共享内存作为日志池,用于存储待写入的日志信息。另外,还可以引入无锁循环数组,保证该共享内存在写满时,能够自动覆盖写入时间最早的日志信息。
具体的,可以规定每条日志信息的大小为某个数值,比如5120字节。所述日志信息可以包括:当前写入日志的进程ID、线程ID、时间、日志类型、日志内容、当前操作系统的版本以及登录的用户信息等。
102、通过日志查看工具从所述循环队列中读取并输出日志信息。
在日志信息写入完成后,通过日志查看工具从所述循环队列中读取并输出日志信息。产生日志信息的软件相当于生产者,日志查看工具则相当于消费者。生产者需要写入日志时,按照一定的格式组装日志信息,写入共享内存的循环队列中;如果消费者没有开启,那么该循环队列中新的日志信息会自动循环覆盖旧的日志信息。
进一步的,步骤102可以包括:
(1)通过日志查看工具定期从所述循环队列中读取日志信息,所述循环队列中已被读取日志信息的存储位置被标记为可写入状态;
(2)将所述日志信息按照预设的格式转换成日志文件;
(3)在本地保存所述日志文件。
对于上述步骤(1)至(3),通过日志查看工具定期从所述循环队列中读取日志信息(即消费者已开启),所述循环队列中已被读取日志信息的存储位置被标记为可写入状态,以便写入新的日志信息。在读取到日志信息后,可以直接查阅这些日志信息,也可以将这些日志信息按照一定的格式转换成日志文件,保存在本地。
进一步的,所述日志查看工具可以在步骤101之前启动。通过这样设置,便于在客户端软件产生异常后,能够通过该日志查看工具获取相关的日志信息。
进一步的,所述日志查看工具可以提供日志过滤、查找的功能,可以根据日志的进程ID、线程ID和日志类型等内容进行日志的过滤和查找。
进一步的,所述日志查看工具可以获取终端的操作系统信息以及硬件信息,以便于当客户端软件出现异常时,服务商能够在相同的软硬件环境下复现问题,更快地确定问题的产生原因。
本发明实施例提出的日志输出方法包括:在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息,所述循环队列在系统内存的指定区域中预先构建;通过日志查看工具从所述循环队列中读取并输出日志信息。上述过程通过使用CAS原子操作技术,而不是系统的信号量、互斥锁、事件等线程同步技术来协调各个线程的正常工作,极大地降低了系统的消耗,能够避免出现软件运行速率下降,影响用户体验的问题。
请参阅图2a,本发明实施例中一种日志输出方法的第二个实施例包括:
201、当任意一个线程准备写入日志信息时,判断当前是否有其它线程正在写入日志信息至循环队列;
在本发明实施例中,当任意一个线程准备写入日志信息时,首先判断当前是否有其它线程正在写入日志信息至循环队列。若当前有其它线程正在写入日志信息至所述循环队列,则执行步骤202;若当前没有其它线程正在写入日志信息至所述循环队列,则执行步骤203。
本发明实施例中一种循环队列的结构示意图如图2b所示,图中的每个方格表示循环队列的一个位置(图中仅示出了循环队列的部分位置),空白的方格表示可写入数据的位置,打叉的方格表示可读出数据的位置,各个位置的标号从左到右依次递增。WI表示第一指针,指向循环队列中下一个可写入数据的位置;MI表示第二指针,指向循环队列中可读出数据的最大位置(即标号最大的可读出数据的位置,图中第3个打叉的方格)的下一个位置;RI表示第三指针,指向循环队列中下一个读出数据的位置。如果第一指针和第二指针指向同一个位置,则表明当前没有数据正在写入循环队列;反之,如果第一指针和第二指针不是指向同一个位置,则表明当前有数据正在写入循环队列,直到所有数据都写入完成后,第二指针才会推进至与第一指针相同的位置。
进一步的,步骤201可以包括:
(1)若第一指针和第二指针指向同一个位置,则判定当前没有其它线程正在写入日志信息至所述循环队列;
(2)若第一指针和第二指针不是指向同一个位置,则判定当前有其它线程正在写入日志信息至所述循环队列。
对于上述步骤(1)和(2)的判断依据,可参照上述循环队列的结构说明。
202、延时预设的时长;
当前有其它线程正在写入日志信息至所述循环队列,此时延时预设的时长,然后返回步骤201,以执行下一次的判断。也即,某个线程在准备写入日志信息至循环队列时,若当前有其它线程正在写入日志信息至所述循环队列,则该线程会处于等待的状态。通过这样设置,限制了同一时刻只能有一个线程往循环队列中写入日志信息。
203、各个线程使用比较并交换机制的原子操作方式竞争第一指针;
当前没有线程正在写入日志信息至所述循环队列,此时各个线程使用比较并交换机制(CAS)的原子操作方式竞争第一指针。这里的各个线程指当前准备写入日志信息至循环队列的所有线程,它们采用比较并交换机制的原子操作方式来竞争第一指针的操作权。
204、由竞争第一指针成功的线程将日志信息写入所述循环队列;
在同一时刻,只能有一个线程竞争成功,此时由竞争成功的线程将日志信息写入所述循环队列。然后,可以返回步骤201,以重复执行步骤201-204,直至完成所有线程的日志信息的写入操作,最后再执行步骤205。
进一步的,步骤204可以包括:
(1)将第一指针从当前位置推进至下一个位置;
(2)由竞争第一指针成功的线程往所述当前位置写入日志信息;
(3)将第二指针推进至第一指针指向的位置。
对于上述步骤(1)至(3),竞争第一指针成功的线程在获得第一指针的操作权后,将第一指针从当前位置推进至下一个可写入数据的位置。然后该线程往所述当前位置写入待写入的日志信息,待日志信息写入完成后,将第二指针推进至第一指针指向的位置,表示完整的数据写入操作结束。
205、通过日志查看工具从所述循环队列中读取并输出日志信息。
步骤205与步骤102相同,具体可参照步骤102的相关说明。
本发明实施例提出的日志输出方法包括:当任意一个线程准备写入日志信息时,判断当前是否有其它线程正在写入日志信息至循环队列;若当前有其它线程正在写入日志信息至循环队列,则延时预设的时长,然后返回进行再一次的判断;若当前没有其它线程正在写入日志信息至循环队列,则各个线程使用比较并交换机制的原子操作方式竞争第一指针;由竞争第一指针成功的线程将日志信息写入所述循环队列;通过日志查看工具从所述循环队列中读取并输出日志信息。上述过程通过使用CAS原子操作技术,而不是系统的信号量、互斥锁、事件等线程同步技术来协调各个线程的正常工作,极大地降低了系统的消耗,能够避免出现软件运行速率下降,影响用户体验的问题。
请参阅图3,本发明实施例中一种日志输出方法的第三个实施例包括:
301、当任意一个线程准备写入日志信息时,判断当前是否有其它线程正在写入日志信息至循环队列;
当任意一个线程准备写入日志信息时,判断当前是否有其它线程正在写入日志信息至循环队列。若当前有其它线程正在写入日志信息至所述循环队列,则执行步骤302;若当前没有其它线程正在写入日志信息至所述循环队列,则执行步骤305。
302、判断当前正在写入日志信息至所述循环队列的线程是否产生异常;
当前有其它线程正在写入日志信息至所述循环队列,此时判断当前正在写入日志信息至所述循环队列的线程是否产生异常。线程在执行的过程中可能会出现崩溃等异常现象,而若某个线程在将数据写入循环队列的过程中产生异常,则会导致数据写入过程的中断,此时将无法执行新的数据入列。一般地,可以采用计时的方法判断当前正在写入日志信息至所述循环队列的线程是否产生异常,比如设置一个时长,若在该时长内某线程仍然未完成日志信息的写入操作,则可判定该线程产生异常。若当前正在写入日志信息至所述循环队列的线程产生异常,则执行步骤303;若当前正在写入日志信息至所述循环队列的线程未产生异常,则执行步骤304。
303、使用比较并交换机制的原子操作方式将第二指针推进至第一指针指向的位置;
当前正在写入日志信息至所述循环队列的线程产生异常,此时使用比较并交换机制的原子操作方式将第二指针推进至第一指针指向的位置,这里的第一指针和第二指针请参照本发明第二个实施例的相关说明。也即,放弃当前的写入位置,强制结束该线程的日志信息写入过程,将队列推进到下一个位置,从而使得其它线程能够正常竞争并执行数据的入列操作。然后,可以执行步骤304,也可以执行步骤305。
304、延时预设的时长;
延时预设的时长,然后返回步骤301。
305、各个线程使用比较并交换机制的原子操作方式竞争第一指针;
306、由竞争第一指针成功的线程将日志信息写入所述循环队列;
307、通过日志查看工具从所述循环队列中读取并输出日志信息。
步骤305-307与步骤203-205相同,具体可参照步骤203-205的相关说明。
与本发明的第二个实施例相比,本实施例通过判断当前正在写入日志信息至所述循环队列的线程是否产生异常,并且在判定产生异常之后使用比较并交换机制的原子操作方式将第二指针推进至第一指针指向的位置,以强制结束该线程的数据写入过程,从而可以保证数据的入列过程不会被某个异常线程卡住,避免产生数据无法入列的问题。
应理解,上述各个实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
上面主要描述了一种日志输出方法,下面将对一种日志输出装置进行描述。
请参阅图4,本发明实施例中一种日志输出装置的一个实施例包括:
日志写入模块401,用于在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息,所述循环队列在系统内存的指定区域中预先构建;
日志读取模块402,用于通过日志查看工具从所述循环队列中读取并输出日志信息。
进一步的,所述日志写入模块可以包括:
判断单元,用于当任意一个线程准备写入日志信息时,判断当前是否有其它线程正在写入日志信息至所述循环队列;
延时单元,用于若当前有其它线程正在写入日志信息至所述循环队列,则在预设时长之后,返回执行判断当前是否有其它线程正在写入日志信息至所述循环队列的步骤以及后续步骤;
竞争指针单元,用于若当前没有其它线程正在写入日志信息至所述循环队列,则各个线程使用比较并交换机制的原子操作方式竞争第一指针,所述第一指针指向循环队列中下一个可写入数据的位置;
日志写入单元,用于由竞争第一指针成功的线程将日志信息写入所述循环队列。
进一步的,所述日志输出装置还可以包括:
第一判定模块,用于若所述第一指针和第二指针指向同一个位置,则判定当前没有其它线程正在写入日志信息至所述循环队列,所述第二指针指向循环队列中可读出数据的最大位置的下一个位置;
第二判定模块,用于若所述第一指针和第二指针不是指向同一个位置,则判定当前有其它线程正在写入日志信息至所述循环队列;
所述日志写入单元可以包括:
第一指针推进子单元,用于将所述第一指针从当前位置推进至下一个位置;
日志写入子单元,用于由竞争第一指针成功的线程往所述当前位置写入日志信息;
第二指针推进子单元,用于将所述第二指针推进至所述第一指针指向的位置。
本发明实施例还提供一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如图1至图3表示的任意一种日志输出方法的步骤。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如图1至图3表示的任意一种日志输出方法的步骤。
图5是本发明一实施例提供的终端设备的示意图。如图5所示,该实施例的终端设备5包括:处理器50、存储器51以及存储在所述存储器51中并可在所述处理器50上运行的计算机程序52。所述处理器50执行所述计算机程序52时实现上述各个日志输出方法的实施例中的步骤,例如图1所示的步骤101至102。或者,所述处理器50执行所述计算机程序52时实现上述各装置实施例中各模块/单元的功能,例如图4所示模块401至402的功能。
所述计算机程序52可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器51中,并由所述处理器50执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序52在所述终端设备5中的执行过程。
所述终端设备5可以是各种类型的手机、桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器50、存储器51。本领域技术人员可以理解,图5仅仅是终端设备5的示例,并不构成对终端设备5的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备5还可以包括输入输出设备、网络接入设备、总线等。
所称处理器50可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application-Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器51可以是所述终端设备5的内部存储单元,例如终端设备5的硬盘或内存。所述存储器51也可以是所述终端设备5的外部存储设备,例如所述终端设备5上配备的插接式硬盘、智能媒体卡(Smart Media Memory Card,SM)、安全数字卡(Secure DigitalMemory Card,SD)、闪存卡(Compact Flash Memory Card,CF)等。进一步地,所述存储器51还可以既包括所述终端设备5的内部存储单元也包括外部存储设备。所述存储器51用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器51还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口、装置或单元的间接耦合或通讯连接,可以是电性、机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
Claims (10)
1.一种日志输出方法,其特征在于,包括:
在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息,所述循环队列在系统内存的指定区域中预先构建;
通过日志查看工具从所述循环队列中读取并输出日志信息。
2.如权利要求1所述的日志输出方法,其特征在于,所述各个线程依次往循环队列中写入日志信息包括:
当任意一个线程准备写入日志信息时,判断当前是否有其它线程正在写入日志信息至所述循环队列;
若当前有其它线程正在写入日志信息至所述循环队列,则在预设时长之后,返回执行判断当前是否有其它线程正在写入日志信息至所述循环队列的步骤以及后续步骤;
若当前没有其它线程正在写入日志信息至所述循环队列,则各个线程使用比较并交换机制的原子操作方式竞争第一指针,所述第一指针指向循环队列中下一个可写入数据的位置;
由竞争第一指针成功的线程将日志信息写入所述循环队列。
3.如权利要求2所述的日志输出方法,其特征在于,当前是否有其它线程正在写入日志信息至所述循环队列通过以下步骤判定:
若所述第一指针和第二指针指向同一个位置,则判定当前没有其它线程正在写入日志信息至所述循环队列,所述第二指针指向循环队列中可读出数据的最大位置的下一个位置;
若所述第一指针和第二指针不是指向同一个位置,则判定当前有其它线程正在写入日志信息至所述循环队列;
所述由竞争第一指针成功的线程将日志信息写入所述循环队列包括:
将所述第一指针从当前位置推进至下一个位置;
由竞争第一指针成功的线程往所述当前位置写入日志信息;
将所述第二指针推进至所述第一指针指向的位置。
4.如权利要求3所述的日志输出方法,其特征在于,若当前有其它线程正在写入日志信息至所述循环队列,则在延时预设时长之前,还包括:
判断当前正在写入日志信息至所述循环队列的线程是否产生异常;
若当前正在写入日志信息至所述循环队列的线程产生异常,则使用比较并交换机制的原子操作方式将所述第二指针推进至所述第一指针指向的位置。
5.如权利要求1-4中任一项所述的日志输出方法,其特征在于,所述通过日志查看工具从所述循环队列中读取并输出日志信息包括:
通过日志查看工具定期从所述循环队列中读取日志信息,所述循环队列中已被读取日志信息的存储位置被标记为可写入状态;
将所述日志信息按照预设的格式转换成日志文件;
在本地保存所述日志文件。
6.一种日志输出装置,其特征在于,包括:
日志写入模块,用于在获取到日志写入请求后,各个线程依次往循环队列中写入日志信息,所述循环队列在系统内存的指定区域中预先构建;
日志读取模块,用于通过日志查看工具从所述循环队列中读取并输出日志信息。
7.如权利要求6所述的日志输出装置,其特征在于,所述日志写入模块包括:
判断单元,用于当任意一个线程准备写入日志信息时,判断当前是否有其它线程正在写入日志信息至所述循环队列;
延时单元,用于若当前有其它线程正在写入日志信息至所述循环队列,则在预设时长之后,返回执行判断当前是否有其它线程正在写入日志信息至所述循环队列的步骤以及后续步骤;
竞争指针单元,用于若当前没有其它线程正在写入日志信息至所述循环队列,则各个线程使用比较并交换机制的原子操作方式竞争第一指针,所述第一指针指向循环队列中下一个可写入数据的位置;
日志写入单元,用于由竞争第一指针成功的线程将日志信息写入所述循环队列。
8.如权利要求7所述的日志输出装置,其特征在于,还包括:
第一判定模块,用于若所述第一指针和第二指针指向同一个位置,则判定当前没有其它线程正在写入日志信息至所述循环队列,所述第二指针指向循环队列中可读出数据的最大位置的下一个位置;
第二判定模块,用于若所述第一指针和第二指针不是指向同一个位置,则判定当前有其它线程正在写入日志信息至所述循环队列;
所述日志写入单元包括:
第一指针推进子单元,用于将所述第一指针从当前位置推进至下一个位置;
日志写入子单元,用于由竞争第一指针成功的线程往所述当前位置写入日志信息;
第二指针推进子单元,用于将所述第二指针推进至所述第一指针指向的位置。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5中任一项所述的日志输出方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述的日志输出方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810358271.2A CN108509327A (zh) | 2018-04-20 | 2018-04-20 | 一种日志输出方法、装置、终端设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810358271.2A CN108509327A (zh) | 2018-04-20 | 2018-04-20 | 一种日志输出方法、装置、终端设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108509327A true CN108509327A (zh) | 2018-09-07 |
Family
ID=63383061
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810358271.2A Pending CN108509327A (zh) | 2018-04-20 | 2018-04-20 | 一种日志输出方法、装置、终端设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108509327A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109471743A (zh) * | 2018-11-12 | 2019-03-15 | 深圳前海微众银行股份有限公司 | 日志收集方法、装置及计算机可读存储介质 |
CN110750372A (zh) * | 2019-10-16 | 2020-02-04 | 深圳技威时代科技有限公司 | 基于共享内存的日志系统及日志管理方法 |
CN111143218A (zh) * | 2019-12-27 | 2020-05-12 | 深圳市共进电子股份有限公司 | 适用于5G嵌入式设备的log调试方法、装置和可读存储介质 |
CN111858508A (zh) * | 2020-06-17 | 2020-10-30 | 远光软件股份有限公司 | 一种日志系统的调控方法、装置、存储介质及电子设备 |
CN111858077A (zh) * | 2020-07-15 | 2020-10-30 | 济南浪潮数据技术有限公司 | 一种存储系统中io请求日志的记录方法、装置及设备 |
CN112306827A (zh) * | 2020-03-25 | 2021-02-02 | 北京沃东天骏信息技术有限公司 | 日志采集装置、方法和计算机可读存储介质 |
CN112346881A (zh) * | 2019-08-07 | 2021-02-09 | 北京东土科技股份有限公司 | 一种嵌入式设备的操作指令信息的存储方法及装置 |
WO2022161170A1 (en) * | 2021-01-29 | 2022-08-04 | International Business Machines Corporation | Database log writing based on log pipeline contention |
CN114978729A (zh) * | 2022-05-27 | 2022-08-30 | 重庆长安汽车股份有限公司 | 基于can总线车载入侵的检测方法、系统及可读存储介质 |
CN115113931A (zh) * | 2022-07-22 | 2022-09-27 | 瀚博半导体(上海)有限公司 | 数据处理系统、方法、人工智能芯片、电子设备和介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101087210A (zh) * | 2007-05-22 | 2007-12-12 | 网御神州科技(北京)有限公司 | 高性能的Syslog日志处理和存储方法 |
CN104252405A (zh) * | 2013-06-26 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 日志信息的输出方法及装置 |
CN104571958A (zh) * | 2014-12-27 | 2015-04-29 | 北京奇虎科技有限公司 | 一种任务执行方法和装置 |
CN105224444A (zh) * | 2015-10-14 | 2016-01-06 | 深圳市金证科技股份有限公司 | 日志生成方法及装置 |
US20160048351A1 (en) * | 2013-09-04 | 2016-02-18 | DataGravity, Inc. | Multi-threaded transaction log for primary and restore/intelligence |
US9317297B2 (en) * | 2012-09-27 | 2016-04-19 | Intel Corporation | Replay execution of instructions in thread chunks in the chunk order recorded during previous execution |
CN105577445A (zh) * | 2015-12-30 | 2016-05-11 | 北京京东尚科信息技术有限公司 | 一种日志收集和上报的方法和装置 |
CN105868031A (zh) * | 2016-03-24 | 2016-08-17 | 车智互联(北京)科技有限公司 | 一种数据传输装置和方法 |
-
2018
- 2018-04-20 CN CN201810358271.2A patent/CN108509327A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101087210A (zh) * | 2007-05-22 | 2007-12-12 | 网御神州科技(北京)有限公司 | 高性能的Syslog日志处理和存储方法 |
US9317297B2 (en) * | 2012-09-27 | 2016-04-19 | Intel Corporation | Replay execution of instructions in thread chunks in the chunk order recorded during previous execution |
CN104252405A (zh) * | 2013-06-26 | 2014-12-31 | 腾讯科技(深圳)有限公司 | 日志信息的输出方法及装置 |
US20160048351A1 (en) * | 2013-09-04 | 2016-02-18 | DataGravity, Inc. | Multi-threaded transaction log for primary and restore/intelligence |
CN104571958A (zh) * | 2014-12-27 | 2015-04-29 | 北京奇虎科技有限公司 | 一种任务执行方法和装置 |
CN105224444A (zh) * | 2015-10-14 | 2016-01-06 | 深圳市金证科技股份有限公司 | 日志生成方法及装置 |
CN105577445A (zh) * | 2015-12-30 | 2016-05-11 | 北京京东尚科信息技术有限公司 | 一种日志收集和上报的方法和装置 |
CN105868031A (zh) * | 2016-03-24 | 2016-08-17 | 车智互联(北京)科技有限公司 | 一种数据传输装置和方法 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109471743A (zh) * | 2018-11-12 | 2019-03-15 | 深圳前海微众银行股份有限公司 | 日志收集方法、装置及计算机可读存储介质 |
CN112346881A (zh) * | 2019-08-07 | 2021-02-09 | 北京东土科技股份有限公司 | 一种嵌入式设备的操作指令信息的存储方法及装置 |
CN112346881B (zh) * | 2019-08-07 | 2023-05-23 | 北京东土科技股份有限公司 | 一种嵌入式设备的操作指令信息的存储方法及装置 |
CN110750372A (zh) * | 2019-10-16 | 2020-02-04 | 深圳技威时代科技有限公司 | 基于共享内存的日志系统及日志管理方法 |
CN110750372B (zh) * | 2019-10-16 | 2024-05-14 | 深圳技威时代科技有限公司 | 基于共享内存的日志系统及日志管理方法 |
CN111143218A (zh) * | 2019-12-27 | 2020-05-12 | 深圳市共进电子股份有限公司 | 适用于5G嵌入式设备的log调试方法、装置和可读存储介质 |
CN111143218B (zh) * | 2019-12-27 | 2024-03-26 | 深圳市共进电子股份有限公司 | 适用于5G嵌入式设备的log调试方法、装置和可读存储介质 |
CN112306827A (zh) * | 2020-03-25 | 2021-02-02 | 北京沃东天骏信息技术有限公司 | 日志采集装置、方法和计算机可读存储介质 |
CN112306827B (zh) * | 2020-03-25 | 2024-10-18 | 北京京东拓先科技有限公司 | 日志采集装置、方法和计算机可读存储介质 |
CN111858508A (zh) * | 2020-06-17 | 2020-10-30 | 远光软件股份有限公司 | 一种日志系统的调控方法、装置、存储介质及电子设备 |
CN111858077A (zh) * | 2020-07-15 | 2020-10-30 | 济南浪潮数据技术有限公司 | 一种存储系统中io请求日志的记录方法、装置及设备 |
GB2617999A (en) * | 2021-01-29 | 2023-10-25 | Ibm | Database log writing based on log pipeline contention |
US11797522B2 (en) | 2021-01-29 | 2023-10-24 | International Business Machines Corporation | Database log writing based on log pipeline contention |
WO2022161170A1 (en) * | 2021-01-29 | 2022-08-04 | International Business Machines Corporation | Database log writing based on log pipeline contention |
CN114978729A (zh) * | 2022-05-27 | 2022-08-30 | 重庆长安汽车股份有限公司 | 基于can总线车载入侵的检测方法、系统及可读存储介质 |
CN115113931A (zh) * | 2022-07-22 | 2022-09-27 | 瀚博半导体(上海)有限公司 | 数据处理系统、方法、人工智能芯片、电子设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108509327A (zh) | 一种日志输出方法、装置、终端设备和存储介质 | |
CN107977268B (zh) | 人工智能的异构硬件的任务调度方法、装置及可读介质 | |
CN110231995B (zh) | 一种基于Actor模型的任务调度方法、装置及存储介质 | |
CN108710531A (zh) | 循环队列的数据写入方法、装置、终端设备和存储介质 | |
CN108733464A (zh) | 一种确定计算任务的调度方案的方法及装置 | |
CN108491207A (zh) | 表达式处理方法、装置、设备及计算机可读存储介质 | |
US20240143392A1 (en) | Task scheduling method, chip, and electronic device | |
CN108388547A (zh) | 字符串解析方法、装置、设备及计算机可读存储介质 | |
CN114490251A (zh) | 日志处理系统、日志处理方法及终端设备 | |
CN109615130A (zh) | 一种定时提醒办理业务的方法、装置及系统 | |
CN111291022B (zh) | 一种基于区块链的数据存储系统 | |
CN109840141A (zh) | 基于云监控的线程控制方法、装置、电子设备及存储介质 | |
JP5773493B2 (ja) | 情報処理装置 | |
CN106873545A (zh) | 一种基于fpga的实时多任务调度系统 | |
CN107977504A (zh) | 一种非对称堆芯燃料管理计算方法、装置及终端设备 | |
CN116701387A (zh) | 数据分段写入方法、数据读取方法及装置 | |
CN108021486B (zh) | 电子装置、征信数据处理的方法及存储介质 | |
CN109242067A (zh) | 一种医用纱布监控方法及装置 | |
CN116893854A (zh) | 指令资源的冲突检测方法、装置、设备及存储介质 | |
US9038077B1 (en) | Data transfer protection in a multi-tasking modeling environment | |
CN110347572A (zh) | 一种性能日志输出方法、装置、系统、设备及介质 | |
CN109710187A (zh) | NVMe SSD主控芯片的读命令加速方法、装置、计算机设备及存储介质 | |
CN115981808A (zh) | 调度方法、装置、计算机设备和存储介质 | |
CN109492057A (zh) | 一种教育系统的用于Hive离线计算方法及电子设备 | |
CN115408383A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180907 |