CN112306980A - 日志处理方法及终端设备 - Google Patents
日志处理方法及终端设备 Download PDFInfo
- Publication number
- CN112306980A CN112306980A CN202011187541.1A CN202011187541A CN112306980A CN 112306980 A CN112306980 A CN 112306980A CN 202011187541 A CN202011187541 A CN 202011187541A CN 112306980 A CN112306980 A CN 112306980A
- Authority
- CN
- China
- Prior art keywords
- log
- file
- target
- thread
- refreshing
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 26
- 230000006870 function Effects 0.000 claims description 105
- 238000000034 method Methods 0.000 claims description 43
- 230000008569 process Effects 0.000 claims description 24
- 238000004590 computer program Methods 0.000 claims description 19
- 230000007717 exclusion Effects 0.000 claims description 16
- 238000012545 processing Methods 0.000 description 11
- 238000001514 detection method Methods 0.000 description 6
- 238000003745 diagnosis Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- 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/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请适用于计算机技术领域,提供了日志处理方法及终端设备,包括:将应用线程的日志信息存入日志缓存队列;其中所述应用线程为运行应用程序的应用功能的线程;通过日志队列管理线程,每隔第一预设时间段从所述日志缓存队列中获取所述日志信息,并写入目标日志文件;通过日志刷新线程,每隔第二预设时间段刷新所述目标日志文件,以保证所述日志队列管理线程写入所述目标日志文件中的日志信息存储至所述目标日志文件中;其中,应用线程、日志队列管理线程、日志刷新线程为三个独立的线程。本申请实施例能够在有效输出日志信息的同时保证应用程序的高效运行。
Description
技术领域
本申请属于计算机技术领域,尤其涉及一种日志处理方法及终端设备。
背景技术
目前,在应用程序运行时常常需要输出日志信息,以记录应用程序在某些节点的运行状态。现有技术中,日志信息的输出方式有两种,一种是在应用程序执行应用功能过程中,通过打印函数printf将日志信息实时打印输出至应用程序的提示框中,另外一种是在应用程序执行应用功能的过程中,将日志信息实时写入日志文件进行输出保存。然而,这两种方式都需要在应用程序执行应用功能时实时输出日志信息,从而影响了应用程序的运行效率。
发明内容
有鉴于此,本申请实施例提供了日志处理方法及终端设备,以解决现有技术中如何在有效地输出日志信息的同时保证应用程序的高效运行问题。
本申请实施例的第一方面提供了一种日志处理方法,包括:
将应用线程的日志信息存入日志缓存队列;其中所述应用线程为运行应用程序的应用功能的线程;
通过日志队列管理线程,每隔第一预设时间段从所述日志缓存队列中获取所述日志信息,并写入目标日志文件,其中所述日志队列管理线程为提前在所述应用程序中创建的独立于所述应用线程的线程;
通过日志刷新线程,每隔第二预设时间段刷新所述目标日志文件,以保证所述日志队列管理线程写入所述目标日志文件中的日志信息存储至所述目标日志文件中;其中,所述日志刷新线程为提前在所述应用程序中创建的独立于所述应用线程及所述日志队列管理线程的线程,所述第二预设时间段大于所述第一预设时间段。
可选地,所述通过日志队列管理线程,每隔第一预设时间段从所述日志缓存队列中获取所述日志信息,并写入目标日志文件中,包括通过日志队列管理线程,执行以下的写入流程:
从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件;
置位刷新标志;所述刷新标志用于指示所述日志刷新线程刷新所述目标日志文件;
间隔第一预设时间后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
对应地,所述通过日志刷新线程,每隔第二预设时间段刷新所述目标日志文件,包括:通过所述日志刷新线程,执行以下的刷新流程:
检测所述刷新标志是否处于置位状态;
若检测到所述刷新标志处于置位状态,则将所述刷新标志恢复为清零状态;
通过刷新函数刷新所述目标日志文件;
间隔第二预设时间后,返回执行所述检测所述刷新标志是否处于置位状态的步骤以及后续的步骤。
可选地,在所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件之前,还包括:
创建并打开新的日志文件作为当前的目标日志文件;
对应地,所述间隔第一预设时间后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤,包括:
若所述目标日志文件的文件大小小于预设文件大小,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
否则,关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤。
可选地,所述若所述目标日志文件的文件大小小于预设文件大小,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤,包括:
若检测到文件满标志处于清零状态,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;其中,所述文件满标志在当前的所述目标日志文件创建时初始为清零状态,并在日志刷新线程检测到当前的目标日志文件的文件大小大于或者等于预设文件大小时置位。
可选地,所述关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤,包括:
若检测到所述文件满标志处于置位状态,则关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤。
可选地,所述刷新流程中,在所述通过刷新函数刷新所述目标日志文件之前,还包括:
获取所述目标日志文件的文件大小并与预设文件大小进行比较;
对应地,所述通过刷新函数刷新所述目标日志文件,包括:
若所述目标日志文件的文件大小小于预设文件大小,则通过刷新函数刷新所述目标日志文件;否则,将所述文件满标志置位。
可选地,所述目标日志文件存放于目标文件目录中,各个所述目标日志文件的文件名为整数值,且所述整数值根据所述目标日志文件创建时间的先后从小到大递增,对应地,所述创建并打开新的日志文件作为当前的目标日志文件,包括:
打开所述目标文件目录;
从所述目标文件目录中确定文件名为整数值的所述目标日志文件,并从各个所述目标日志文件的文件名中找出最大的整数值;
将所述最大的整数值加上预设值作为新的文件名;
根据所述新的文件名,创建并打开新的日志文件作为当前的目标日志文件。
可选地,所述日志处理方法还包括:
若检测到所述目标文件目录存储的目标日志文件的总数大于或者等于第一预设数目,则根据所述目标文件目录中文件名的整数值,按照所述整数值从小到大的顺序选取第二预设数目个目标日志文件,并删除选取的所述第二预设数目个目标日志文件。
可选地,所述应用线程的数目为一个以上,所述将应用线程的日志信息存入日志缓存队列,包括:
若所述应用线程存在需要打印的日志信息且日志打印接口的互斥锁处于解锁状态,则:
调用所述日志打印接口,并将所述日志打印接口的互斥锁设置为加锁状态;
通过所述日志打印接口,将所述应用程序的日志信息存入所述日志缓存队列;
将所述日志打印接口的互斥锁设置为解锁状态。
本申请实施例的第二方面提供了一种日志处理装置,包括:
应用线程运行单元,用于将应用线程的日志信息存入日志缓存队列;其中所述应用线程为运行应用程序的应用功能的线程;
日志队列管理线程运行单元,用于通过日志队列管理线程,每隔第一预设时间段从所述日志缓存队列中获取所述日志信息,并写入目标日志文件中,其中所述日志队列管理线程为提前在所述应用程序中创建的独立于所述应用线程的线程;
日志刷新线程运行单元,用于通过日志刷新线程,每隔第二预设时间段刷新所述目标日志文件,以保证所述日志队列管理线程写入所述目标日志文件中的日志信息存储至所述目标日志文件中;其中,所述日志刷新线程为提前在所述应用程序中创建的独立于所述应用线程及所述日志队列管理线程的线程,所述第二预设时间段大于所述第一预设时间段。
可选地,所述日志队列管理线程运行单元,包括日志信息写入模块、刷新标志置位模块、以及第一延时模块:
日志信息写入模块,用于从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件;
刷新标志置位模块,用于置位刷新标志;所述刷新标志用于指示所述日志刷新线程刷新所述目标日志文件;
第一延时模块,用于间隔第一预设时间后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
对应地,所述日志刷新线程运行单元,包括刷新标志检测模块、刷新标志清零模块、目标日志文件刷新模块以及第二延时模块:
刷新标志检测模块,用于检测所述刷新标志是否处于置位状态;
刷新标志清零模块,用于若检测到所述刷新标志处于置位状态,则将所述刷新标志恢复为清零状态;
目标日志文件刷新模块,用于通过刷新函数刷新所述目标日志文件;
第二延时模块,用于间隔第二预设时间后,返回执行所述检测所述刷新标志是否处于置位状态的步骤以及后续的步骤。
可选地,所述日志队列管理线程运行单元22还包括:
目标日志文件创建模块,用于创建并打开新的日志文件作为当前的目标日志文件;
对应地,第一延时模块,具体包括第一选择模块及第二选择模块:
第一选择模块,用于若所述目标日志文件的文件大小小于预设文件大小,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
第二选择模块,用于否则,关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤。
可选地,所述第一选择模块,具体用于若检测到文件满标志处于清零状态,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;其中,所述文件满标志在当前的所述目标日志文件创建时初始为清零状态,并在日志刷新线程检测到当前的目标日志文件的文件大小大于或者等于预设文件大小时置位。
可选地,所述第二选择模块,具体用于若检测到所述文件满标志处于置位状态,则关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤。
可选地,所述日志刷新线程运行单元还包括:
文件大小比较模块,用于获取所述目标日志文件的文件大小并与预设文件大小进行比较;
对应地,所述目标日志文件刷新模块,具体用于若所述目标日志文件的文件大小小于预设文件大小,则通过刷新函数刷新所述目标日志文件;否则,将所述文件满标志置位。
可选地,所述目标日志文件创建模块,具体用于打开所述目标文件目录;从所述目标文件目录中确定文件名为整数值的所述目标日志文件,并从各个所述目标日志文件的文件名中找出最大的整数值;将所述最大的整数值加上预设值作为新的文件名;根据所述新的文件名,创建并打开新的日志文件作为当前的目标日志文件。
可选地,所述日志处理装置还包括:
删除单元,用于若检测到所述目标文件目录存储的目标日志文件的总数大于或者等于第一预设数目,则根据所述目标文件目录中文件名的整数值,按照所述整数值从小到大的顺序选取第二预设数目个目标日志文件,并删除选取的所述第二预设数目个目标日志文件。
可选地,所述应用线程的数目为一个以上,所述应用程序运行单元,具体用于若所述应用线程存在需要打印的日志信息且日志打印接口的互斥锁处于解锁状态,则:调用所述日志打印接口,并将所述日志打印接口的互斥锁设置为加锁状态;通过所述日志打印接口,将所述应用程序的日志信息存入所述日志缓存队列;将所述日志打印接口的互斥锁设置为解锁状态。
本申请实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,当所述处理器执行所述计算机程序时,使得终端设备实现如所述日志处理方法的步骤。
本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,当所述计算机程序被处理器执行时,使得终端设备实现如所述日志处理方法的步骤。
本申请实施例的第五方面提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述日志处理方法的步骤。
本申请实施例与现有技术相比存在的有益效果是:本申请实施例中,由于能够将应用线程运行应用程序的功能时所生成的日志信息先存入日志缓存队列,每隔第一预设时间段后,再由独立于应用线程的日志队列管理线程从日志缓存队列中获取日志信息,写入目标日志文件,因此能够将日志信息的输出步骤(即写入日志文件的步骤)与应用功能的运行分离开,从而能够降低日志信息的输出过程对应用程序运行应用功能的效率的影响,在有效输出日志信息的同时保证应用程序的高效运行。并且,由于在用于执行将日志信息写入目标日志文件的步骤的日志队列管理线程以外的日志刷新线程中,通过大于第一预设时间段的时间间隔,即间隔第二预设时间段,自动刷新目标日志文件,既能够通过目标日志文件的刷新来保证日志队列管理线程写入目标日志文件中的日志信息能及时地存储至所述目标日志文件中,相对于不刷新目标日志文件的方式,提高了日志信息的输出效率;同时,由于第二预设时间大于第一预设时间段,相对于直接在日志队列管理线程中每次刷新目标日志文件的方式,能够降低目标日志文件的刷新频率,减少CPU访问硬盘的次数。因此,本申请实施例能够在减少对应用程序的运行效率的影响的前提下,提高日志信息的输出效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种日志处理方法的实现流程示意图;
图2是本申请实施例提供的一种日志处理装置的示意图;
图3是本申请实施例提供的终端设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
为了说明本申请所述的技术方案,下面通过具体实施例来进行说明。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
目前,日志信息的输出方式通常需要在应用程序执行应用功能时实时输出日志信息,具体在代码中体现为将日志的打印函数printf或者写入函数write/fputs加入应用程序的应用功能部分的代码中,由于日志信息的输出步骤夹杂在应用功能的执行步骤中,导致应用功能的执行的效率及日志信息的输出效率均不高,从而影响了应用程序的运行效率。为了解决该技术问题,本申请提供了一种日志处理方法、装置、终端设备及存储介质,通过将应用线程运行应用程序的功能时所生成的日志信息先存入日志缓存队列,每隔第一预设时间段后,再由独立于应用线程的日志队列管理线程从日志缓存队列中获取日志信息,写入目标日志文件;之后再由日志刷新线程刷新该目标日志文件。由于能够将日志信息的输出步骤(即写入日志文件的步骤)与应用功能的运行分离开,因此能够降低日志信息的输出过程对应用程序运行应用功能的效率的影响;并且,由于日志刷新线程能够每隔第二预设时间来进行目标日志文件的刷新,且该第二预设时间段大于第一预设时间段,因此能够在保证日志信息及时输出至目标日志文件的同时合理控制CPU访问硬盘的次数,综上,本申请实施例能在有效输出日志信息的同时保证应用程序的高效运行。
实施例一:
图1示出了本申请实施例提供的第一种日志处理方法的流程示意图,该日志处理方法的执行主体为终端设备,详述如下:
本申请实施例中,终端设备装载了需要输出日志信息的应用程序,并为该应用程序创建了应用线程、日志队列管理线程和日志刷新线程。其中,应用线程为运行应用程序的应用功能的线程,该应用线程的数量可以为一个或者多个;例如,若当前的应用程序为车辆诊断应用,则应用线程可以包括用于执行点火系统诊断功能的点火系统线程、用于执行防盗系统诊断功能的防盗系统诊断线程等。日志队列管理线程为提前在应用程序中创建的独立于前述的应用线程的线程;日志刷新线程为提前在应用程序中创建的独立于前述的应用线程及日志队列管理线程的线程。
在S101中,将应用线程的日志信息存入日志缓存队列;其中所述应用线程为运行应用程序的应用功能的线程。
在应用程序运行应用功能时,需要在某些节点输出日志信息,例如在车辆诊断应用程序运行车辆诊断功能时,需要记录将当前的车辆的型号信息及诊断码作为本次车辆诊断的日志信息进行输出。应用线程可以在执行该功能时,将需要输出的应用线程的日志信息缓存入预设的日志缓存队列中。
在S102中,通过日志队列管理线程,每隔第一预设时间段从所述日志缓存队列中获取所述日志信息,并写入目标日志文件中,其中所述日志队列管理线程为提前在所述应用程序中创建的独立于所述应用线程的线程。
在应用线程运行的同时,日志队列管理线程也同步开启运行。该日志队列管理线程每隔第一预设时间段,例如每隔50ms,检测日志缓存队列中是否存在日志信息。若存在,则获取其中的一条或者多条日志信息,并将该日志信息写入目标日志文件中,该目标日志文件为专用于存储当前应用程序的日志信息的文件。具体地,可以在日志队列管理线程中,通过调用系统函数write或者fputs等写入函数,将从日志缓存队列获取到的日志信息写入日志文件中。
在S103中,通过日志刷新线程,每隔第二预设时间段刷新所述目标日志文件,以保证所述日志队列管理线程写入所述目标日志文件中的日志信息存储至所述目标日志文件中;其中,所述日志刷新线程为提前在所述应用程序中创建的独立于所述应用线程及所述日志队列管理线程的线程。
通常,写入函数将待写入信息写入文件的过程为:调用写入函数,将待写入信息缓存至处理器的系统缓存中;当系统缓存存满时,中央处理器(central processing unit,CPU)访问硬盘,将系统缓存的待写入信息存入硬盘的文件中。即在上述步骤S102中,日志队列管理线程在执行将日志信息写入目标日志文件的步骤时,并不能保证日志信息真正存入目标日志文件的时间,通常需要累积多次执行将日志信息写入目标日志文件的步骤后,使得系统缓存存满,再一次性将累计多次的日志信息存入目标日志文件中。这一过程可能导致日志信息真正存储至目标日志文件的时间滞后,例如,在当前时刻通过写入函数写入目标日志文件的日志信息,可能需要在100秒后才真正的存入目标日志文件中。为了提高日志信息的输出效率,即提高日志信息真正存入目标日志文件的效率,可以在每次执行将日志信息写入目标日志文件的步骤之后,通过刷新函数fflush来刷新该目标日志文件。其中,刷新目标日志文件指的是,CPU访问硬盘,将系统缓存中缓存的需存入目标日志文件的日志信息立刻存储至目标日志文件中。通过在每次将日志信息写入目标日志文件后刷新目标日志文件,使得日志信息快速地存入硬盘的目标日志文件中,而无需等待系统缓存存满的时间,提高日志信息的输出效率。
具体地,若不刷新目标日志文件,则可能需要等待较长时间后,日志信息才能真正存入目标日志文件中。然而,每刷新一次目标日志文件,即意味着CPU需要访问一次硬盘,CPU访问硬盘需要占据一定的系统资源,如果直接在日志队列管理线程中每执行一次写入操作就刷新一次目标日志文件,可能会导致频繁的硬盘访问,进而影响应用线程执行应用功能的效率。因此,本申请实施例中,具体通过日志刷新线程来解决该问题。
本申请实施例中,日志刷新线程为提前在应用程序中创建的独立于上述的应用线程和日志队列管理线程的线程,该日志刷新线程的启动时间可以与应用线程、日志队列管理线程的启动时间同步,即在应用程序中,同时运行应用线程、日志队列管理线程和日志刷新线程。在该日志刷新线程中,每隔第二预设时间段,通过刷新函数fflush自动刷新目标日志文件。该第二预设时间段大于上述的第一预设时间段,例如,若第一预设时间段为30ms,则第二预设时间段可以为3s。由于在用于执行将日志信息写入目标日志文件的步骤的日志队列管理线程以外的日志刷新线程中,通过大于第一预设时间段的时间间隔,即间隔第二预设时间段,自动刷新目标日志文件,既能够通过目标日志文件的刷新来保证日志队列管理线程写入目标日志文件中的日志信息能及时地存储至所述目标日志文件中,相对于不刷新目标日志文件的方式,提高了日志信息的输出效率;同时,由于第二预设时间大于第一预设时间段,相对于直接在日志队列管理线程中每次刷新目标日志文件的方式,能够降低目标日志文件的刷新频率,减少CPU访问硬盘的次数。
可选地,步骤S102,具体包括:通过日志队列管理线程,执行以下的写入流程:
A1:从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件;
A2:置位刷新标志;所述刷新标志用于指示所述日志刷新线程刷新所述目标日志文件;
A3:间隔第一预设时间后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
对应地,步骤103,具体包括:通过所述日志刷新线程,执行以下的刷新流程:
B1:检测所述刷新标志是否处于置位状态;
B2:若检测到所述刷新标志处于置位状态,则将所述刷新标志恢复为清零状态;
B3:通过刷新函数刷新所述目标日志文件;
B4:间隔第二预设时间后,返回执行所述检测所述刷新标志是否处于置位状态的步骤以及后续的步骤。
本申请实施例中,日志队列管理线程具体通过执行步骤A1至A3来实现每隔第一预设时间将目标日志信息写入对应的日志文件。
在A1中,检测日志缓存队列中是否存在日志信息。如果存在,则获取目标数目的日志信息,并通过写入函数,将获取到的目标数目的日志信息写入目标日志文件中。该目标数目可以提前设定,也可以根据当前日志缓存队列中缓存的日志信息的数量而定。示例性地,该目标数目为1,即每次从日志缓存队列中获取一条日志信息,并将该日志信息通过写入函数写入目标日志文件。
在A2中,日志队列管理线程在每次将日志信息通过写入函数写入目标日志文件之后,将刷新标志置位。该刷新标志用于指示日志刷新线程刷新目标日志文件,即,通过该刷新标志通知日志刷新线程当前系统缓存存在着需要存入目标日志文件的日志信息,可以执行刷新目标日志文件的文件。
在A3中,在置位刷新标志后,间隔第一预设时间,自动返回步骤A1,继续获取日志信息写入当前的目标日志文件。其中,间隔第一预设时间具体可以通过延时函数来实现,即通过延时函数延时等待第一预设时间后,返回执行步骤A1。
对应地,日志刷新线程具体通过步骤B1至B4来刷新目标日志文件。
在B1中,检测刷新标志是否处于置位状态,通过该刷新标识的置位状态可以判断当前系统缓存是否存在日志队列管理线程写入的日志信息。
在B2中,当检测到刷新标识处于置位状态时,先将该刷新标识恢复为清零状态,以便日志队列管理线程的下次置位指示。
在B3中,通过刷新函数刷新目标日志文件,使得CPU访问硬盘,将系统缓存的需写入该目标日志文件的日志信息存储至目标日志文件中。
在B4中,通过延时函数延时等待第二预设时间段后,例如延时3秒后,返回执行步骤B1,重新检测刷新标识的置位状态并执行后续的步骤。由于在第二预设时间段的间隔后再继续执行刷新标志的判定和后续的目标日志文件刷新步骤,因此可以减少这些步骤的执行频率,减少日志刷新线程对系统资源的占据。
本申请实施例中,日志队列管理线程、日志刷新线程通过各自的写入流程、刷新流程,高效有序地实现日志信息的写入及刷新;并且,具体通过刷新标志的设置,使得日志队列管理线程和日志刷新线程能够通过简单的标志即可获取彼此的步骤执行情况,更好地相互配合来实现目标日志文件的及时刷新,以高效地完成日志输出。
可选地,在所述步骤A1之前,还包括:
A0:创建并打开新的日志文件作为当前的目标日志文件;
对应地,所述步骤A3包括:
A31:若所述目标日志文件的文件大小小于预设文件大小,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
A32:否则,关闭所述目标日志文件,并返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤。
在A0中,即在日志队列管理线程的初始步骤中,可以在指定的目标日志文件存放目录中创建并打开新的日志文件作为当前的目标日志文件。例如,通过系统函数fopen创建并打开当前的目标日志文件。
对应地,在步骤A1将日志信息写入已打开的目标日志文件并在步骤A2中置位刷新标识后,在A3中,具体先检测目标日志文件的大小,根据目标日志文件的文件大小判定是否需要另外新建日志文件。具体地,在步骤A31中,若检测到目标日志文件的大小小于预设文件大小(例如30兆),则说明当前的目标日志文件可以继续存储日志信息,此时,通过延时函数延时等待第一预设时间段后,返回执行步骤A1,继续获取日志信息写入当前的目标日志文件中。具体地,在步骤A32中,若目标日志文件的大小大于或者等于预设文件大小,则说明当前目标日志文件已存满日志信息,需要创建新的日志文件来存储后续的日志信息;此时,关闭目标日志文件,并返回上述的步骤A0,创建并打开新的日志文件作为当前的目标日志文件,并继续执行后续的步骤。
本申请实施例中,由于在目标队列管理线程中自动检测目标日志文件的文件大小,当目标日志文件的文件大小小于预设文件大小时,继续往当前的目标日志文件写入日志信息;当目标日志文件的文件大小大于或者等于预设文件大小时,可以自动创建新的日志文件来存储后续的日志信息,因此提高了日志信息输出的智能性,有效地约束了目标日志文件的大小,避免由于目标日志文件过大而不易于后续的文件传输和查看。
可选地,所述步骤A31,包括:
若检测到文件满标志处于清零状态,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;其中,所述文件满标志在当前的所述目标日志文件创建时初始为清零状态,并在日志刷新线程检测到当前的目标日志文件的文件大小大于或者等于预设文件大小时置位;
对应地,所述步骤A32,包括:
若检测到所述文件满标志处于置位状态,则关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤;
对应地,在所述步骤B3之前,还包括:
获取所述目标日志文件的文件大小并与预设文件大小进行比较;
对应地,所述步骤B3,包括:
若所述目标日志文件的文件大小小于预设文件大小,则通过刷新函数刷新所述目标日志文件;否则,将所述文件满标志置位。
本申请实施例中具体是由日志刷新线程来进行目标日志文件的检测,并通过置位文件满标志来通知日志队列管理线程是否需要新建日志文件。具体地,该文件满标志用于标识当前的目标日志文件是否大于或者等于预设文件大小;日志队列管理线程及日志刷新线程均可以访问该文件满标志。其中,在日志队列管理线程新建当前的目标日志文件时,该文件满标志初始为清零状态;之后,在日志刷新线程检测到当前的目标日志文件的大小大于或者等于预设文件大小时将该文件满标志置位。
具体地,在日志队列管理线程的步骤A31中,若检测到文件满标志处于清零状态,即文件满标志尚处于未置位状态,则说明当前的目标日志文件还可以继续存储日志信息,此时,延时等待第一预设时间段后,返回执行步骤A1,继续获取目标日志信息写入当前的目标日志文件中。
具体地,在日志队列管理线程的步骤A32中,若检测到文件满标志处于置位状态,则说明当前的目标日志文件已存满了足够的日志信息,关闭该目标日志文件,返回执行步骤A0,创建并打新的日志文件作为当前的目标日志文件,并继续执行后续的日志信息写入步骤。
具体地,在刷新流程中,在检测到刷新标志置位后,先获取目标日志文件的文件大小,并与预设文件大小进行比较,再进行目标日志文件的刷新。具体地,在上述的步骤B3中,具体在判定当前的目标日志文件的文件大小小于预设文件大小时,通过刷新函数刷新目标日志文件。而在判定当前的目标日志文件的文件大小大于或者等于预设文件大小时,将文件满标志置位,以通知目标日志队列管理线程当前的目标日志文件已存满,指示目标日志队列管理线程之后根据该文件满标志创建新的目标日志文件。
本申请实施例中,考虑到目标日志文件一般是在存储到一定的时间后才会超出预设文件大小,无需频繁地对目标日志文件进行大小检测,因此具体将检测目标日志文件大小的步骤设置在日志刷新线程中执行来减少目标日志文件大小的检测频率,并通过文件满标志来通知日志队列管理线程当前目标日志文件是否已存满。由于日志刷新线程中至少是每隔第二预设时间段才会进行一次目标日志文件大小的检测,相对于直接在日志队列管理线程中每次向目标日志文件写入日志信息后就检测目标日志文件大小的方式,能够降低目标日志文件大小检测的频率,从而在减少对应用程序的运行效率的影响的前提下,满足对目标日志文件大小的约束需求。
可选地,上述的目标日志文件存放于目标文件目录中,各个目标日志文件的文件名为整数值,该整数值根据目标日志文件创建时间的先后从小到大递增,对应地,上述步骤A0的创建并打开新的日志文件作为当前的目标日志文件,包括:
C1:打开所述目标文件目录;
C2:从所述目标文件目录中确定文件名为整数值的所述目标日志文件,并从各个所述目标日志文件的文件名中找出最大的整数值;
C3:将所述最大的整数值加上预设值作为新的文件名;
C4:根据所述新的文件名,创建并打开新的日志文件作为当前的目标日志文件。
本申请实施例中,目标文件目录为提前指定的用于存放目标日志文件的目录。各个目标日志文件的文件名通过整数值来命名,例如1、2、3......10、11等。具体地,各个目标日志文件的该整数值文件名根据该目标日志文件创建时间的先后,从小到大递增,例如,第一个创建的目标日志文件的文件名为1,第二个创建的目标日志文件的文件名为2。
在步骤C1中,根据提前指定的文件路径,通过目录打开函数,例如opendir,打开目标日志文件目录。
在步骤C2中,遍历打开的目标日志文件目录中的各个文件,将文件名为整数值且符合预设条件的文件(例如能够通过open函数打开的常规文件)确定为目标日志文件,并从各个目标日志文件的文件名中找出最大的整数值。具体地,步骤C2可以包括:
S1:获取文件名变量,该文件名变量的值初始为0;
S2:通过readdir函数按顺序遍历目标文件目录中的一个文件的文件名;若检测到遍历完成,则执行步骤S6;
S3:判断该读取的文件名是否为整数值,即文件名的字段是否由0到9的数字组成,如果是,则执行步骤S4,否则返回执行步骤S2;
S4:进一步判断该文件是否符合预设条件;若是,则判定该文件为目标日志文件,并执行步骤S5,否则执行步骤S2;
S5:比较文件名变量与该读取的文件名的整数值的大小,若该读取的文件名的整数值大于文件名变量的值,则将该读取的文件名的整数值赋值给当前的文件名变量,并返回执行步骤S2,以遍历读取下一个文件的文件名,直至目标文件目录中的所有文件都已遍历完;
S6:以当前文件名变量的值作为各个目标日志文件的文件名中的最大的整数值。
在步骤C3中,将步骤C2得到的最大的整数值加上预设值,例如加上1,作为当前新的文件名。
在步骤C4中,根据步骤C3中得到的新的文件名,通过系统函数fopen创建并打开命名为该新的文件名的日志文件作为当前的目标日志文件。可选地,在步骤C4之后,通过系统函数closedir关闭步骤C1中打开的目标文件目录。
本申请实施例中,由于具体以按创建时间顺序增大的整数值作为目标日志文件的文件名,因此可以便于对各个目标日志文件进行排序,并且使得后续能够根据该文件名方便准确地获知各个目标日志文件创建时间的先后顺序。
可选地,该日志处理方法还包括:
若检测到所述目标文件目录存储的目标日志文件的总数大于或者等于第一预设数目,则根据所述目标文件目录中文件名的整数值,按照所述整数值从小到大的顺序选取第二预设数目个目标日志文件,并删除选取的所述第三预设数目个目标日志文件。
本申请实施例中,第一预设数目为提前设定的数目,具体可以根据目标文件存放目录的存储空间大小来设定。具体地,每隔一段时间自动检测目标文件目录存储的目标日志文件的总数,可选地,可以在上述的日志刷新线程中设置该检测步骤,例如可以在上述的步骤C2之后,自动检测目标文件目录存储的目标日志文件的总数;或者,另外创建一个线程,每隔一段时间自动检测目标文件目录存储的目标日志文件的总数。当检测到目标文件目录存储目标日志文件的总数大于或者等于第二预设数目时,例如大于1000个文件时,说明当前目标文件存放目录的存储空间已满,需要删除部分的目标日志文件;此时,根据目标文件目录中文件名的整数值,将各个目标日志文件按照其为整数值的文件名从小到大的顺序进行排序,并从中选取排名在前的前第二预设数目个目标日志文件,对这第二预设数目个目标日志文件进行删除,使得创建时间较早的前第二预设数目个目标日志文件从目标文件存放目录中删除。其中第二预设数目可以为提前设置的数目,也可以为根据当前目标日志文件的总数与第一预设数目的差值而确定的值。
本申请实施例中,由于能够在检测到目标文件存放目录中的目标日志文件的总数大于或者等于第一预设数目时,自动删除第二预设数目的目标日志文件,因此能够自动对目标日志文件的数量进行约束,节约存储空间;并且,删除的第二预设数目的目标日志文件具体是根据其为整数值的文件名从小到大排序后取的前第二预设数目个目标日志文件,使得删除的目标日志文件为创建时间较早的日志文件,从而使得目标文件存放目录存储的为较新的目标日志文件,该较新的目标日志文件相对于较早的日志文件,能够更准确地反映应用程序的应用功能最近的执行情况。
可选地,应用程序中的应用线程的数目为一个以上,上述的步骤S101,包括:
若所述应用线程存在需要打印的日志信息且日志打印接口的互斥锁处于解锁状态,则:
调用所述日志打印接口,并将所述日志打印接口的互斥锁设置为加锁状态;
通过所述日志打印接口,将所述应用程序的日志信息存入所述日志缓存队列;
将所述日志打印接口的互斥锁设置为解锁状态。
本申请实施例中,具体通过日志打印接口来将应用程序的日志信息存入日志缓存队列中。在各个应用线程中,当检测到自身存在需要打印的日志信息,并且该日志打印接口的互斥锁处于解锁状态,则调用该日志打印接口,同时将日志打印接口的互斥锁设置为加锁状态,使得在当前应用线程进行日志打印时,其它应用线程无法调用该日志打印接口。接着,该应用线程通过该日志打印接口,将应用程序的日志信息按顺序存入日志缓存队列中,待存入完毕时,再将日志打印接口的互斥锁设置为解锁状态,以供其他应用线程调用该日志打印接口。
本申请实施例中,由于在存在多个应用线程时,具体通过设置了互斥锁的日志打印接口来将应用程序的日志信息存入日志缓存队列中,使得一次只能由一个应用线程来进行日志信息的存入操作,避免出现多个应用线程争先进行日志信息存放操作而导致后续日志信息输出至目标日志文件时存在信息混乱的情况,因此能够保证日志信息有序地输出。
本申请实施例中,由于能够将应用线程运行应用程序的功能时所生成的日志信息先存入日志缓存队列,每隔第一预设时间段后,再由独立于应用线程的日志队列管理线程从日志缓存队列中获取日志信息,写入目标日志文件,因此能够将日志信息的输出步骤(即写入日志文件的步骤)与应用功能的运行分离开,从而能够降低日志信息的输出过程对应用程序运行应用功能的效率的影响,在有效输出日志信息的同时保证应用程序的高效运行。并且,由于在用于执行将日志信息写入目标日志文件的步骤的日志队列管理线程以外的日志刷新线程中,通过大于第一预设时间段的时间间隔,即间隔第二预设时间段,自动刷新目标日志文件,既能够通过目标日志文件的刷新来保证日志队列管理线程写入目标日志文件中的日志信息能及时地存储至所述目标日志文件中,相对于不刷新目标日志文件的方式,提高了日志信息的输出效率;同时,由于第二预设时间大于第一预设时间段,相对于直接在日志队列管理线程中每次刷新目标日志文件的方式,能够降低目标日志文件的刷新频率,减少CPU访问硬盘的次数。因此,本申请实施例能够在减少对应用程序的运行效率的影响的前提下,提高日志信息的输出效率。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
实施例二:
图2示出了本申请实施例提供的一种日志处理装置的结构示意图,为了便于说明,仅示出了与本申请实施例相关的部分:
该日志处理装置包括:应用线程运行单元21、日志队列管理线程运行单元22和日志刷新线程运行单元23。其中:
应用线程运行单元21,用于将应用线程的日志信息存入日志缓存队列;其中所述应用线程为运行应用程序的应用功能的线程。
日志队列管理线程运行单元22,用于通过日志队列管理线程,每隔第一预设时间段从所述日志缓存队列中获取所述日志信息,并写入目标日志文件中,其中所述日志队列管理线程为提前在所述应用程序中创建的独立于所述应用线程的线程。
日志刷新线程运行单元23,用于通过日志刷新线程,每隔第二预设时间段刷新所述目标日志文件,以保证所述日志队列管理线程写入所述目标日志文件中的日志信息存储至所述目标日志文件中;其中,所述日志刷新线程为提前在所述应用程序中创建的独立于所述应用线程及所述日志队列管理线程的线程,所述第二预设时间段大于所述第一预设时间段。
可选地,所述日志队列管理线程运行单元22,包括日志信息写入模块、刷新标志置位模块、以及第一延时模块:
日志信息写入模块,用于从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件;
刷新标志置位模块,用于置位刷新标志;所述刷新标志用于指示所述日志刷新线程刷新所述目标日志文件;
第一延时模块,用于间隔第一预设时间后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
对应地,所述日志刷新线程运行单元23,包括刷新标志检测模块、刷新标志清零模块、目标日志文件刷新模块以及第二延时模块:
刷新标志检测模块,用于检测所述刷新标志是否处于置位状态;
刷新标志清零模块,用于若检测到所述刷新标志处于置位状态,则将所述刷新标志恢复为清零状态;
目标日志文件刷新模块,用于通过刷新函数刷新所述目标日志文件;
第二延时模块,用于间隔第二预设时间后,返回执行所述检测所述刷新标志是否处于置位状态的步骤以及后续的步骤。
可选地,所述日志队列管理线程运行单元22还包括:
目标日志文件创建模块,用于创建并打开新的日志文件作为当前的目标日志文件;
对应地,第一延时模块,具体包括第一选择模块及第二选择模块:
第一选择模块,用于若所述目标日志文件的文件大小小于预设文件大小,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
第二选择模块,用于否则,关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤。
可选地,所述第一选择模块,具体用于若检测到文件满标志处于清零状态,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;其中,所述文件满标志在当前的所述目标日志文件创建时初始为清零状态,并在日志刷新线程检测到当前的目标日志文件的文件大小大于或者等于预设文件大小时置位。
可选地,所述第二选择模块,具体用于若检测到所述文件满标志处于置位状态,则关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤。
可选地,所述日志刷新线程运行单元23还包括:
文件大小比较模块,用于获取所述目标日志文件的文件大小并与预设文件大小进行比较;
对应地,所述目标日志文件刷新模块,具体用于若所述目标日志文件的文件大小小于预设文件大小,则通过刷新函数刷新所述目标日志文件;否则,将所述文件满标志置位。
可选地,所述目标日志文件创建模块,具体用于打开所述目标文件目录;从所述目标文件目录中确定文件名为整数值的所述目标日志文件,并从各个所述目标日志文件的文件名中找出最大的整数值;将所述最大的整数值加上预设值作为新的文件名;根据所述新的文件名,创建并打开新的日志文件作为当前的目标日志文件。
可选地,所述日志处理装置还包括:
删除单元,用于若检测到所述目标文件目录存储的目标日志文件的总数大于或者等于第一预设数目,则根据所述目标文件目录中文件名的整数值,按照所述整数值从小到大的顺序选取第二预设数目个目标日志文件,并删除选取的所述第二预设数目个目标日志文件。
可选地,所述应用线程的数目为一个以上,所述应用程序运行单元21,具体用于若所述应用线程存在需要打印的日志信息且日志打印接口的互斥锁处于解锁状态,则:调用所述日志打印接口,并将所述日志打印接口的互斥锁设置为加锁状态;通过所述日志打印接口,将所述应用程序的日志信息存入所述日志缓存队列;将所述日志打印接口的互斥锁设置为解锁状态。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
实施例三:
图3是本申请一实施例提供的终端设备的示意图。如图3所示,该实施例的终端设备3包括:处理器30、存储器31以及存储在所述存储器31中并可在所述处理器30上运行的计算机程序32,例如日志处理程序。所述处理器30执行所述计算机程序32时实现上述各个日志处理方法实施例中的步骤,例如图1所示的步骤S101至S103。或者,所述处理器30执行所述计算机程序32时实现上述各装置实施例中各模块/单元的功能,例如图2所示单元21至23的功能。
示例性的,所述计算机程序32可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器31中,并由所述处理器30执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序32在所述终端设备3中的执行过程。例如,所述计算机程序32可以被分割成应用线程运行单元和日志队列管理线程运行单元,各单元具体功能如下:
应用线程运行单元,用于将应用线程的日志信息存入日志缓存队列;其中所述应用线程为运行应用程序的应用功能的线程;
日志队列管理线程运行单元,用于通过日志队列管理线程,每隔第一预设时间段从所述日志缓存队列中获取所述日志信息,,其中所述日志队列管理线程为提前在所述应用程序中创建的独立于所述应用线程的线程;
日志刷新线程运行单元,用于通过日志刷新线程,每隔第二预设时间段刷新所述目标日志文件,以保证所述日志队列管理线程写入所述目标日志文件中的日志信息存储至所述目标日志文件中;其中,所述日志刷新线程为提前在所述应用程序中创建的独立于所述应用线程及所述日志队列管理线程的线程,所述第二预设时间段大于所述第一预设时间段。
所述终端设备3可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述终端设备可包括,但不仅限于,处理器30、存储器31。本领域技术人员可以理解,图3仅仅是终端设备3的示例,并不构成对终端设备3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器30可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器31可以是所述终端设备3的内部存储单元,例如终端设备3的硬盘或内存。所述存储器31也可以是所述终端设备3的外部存储设备,例如所述终端设备3上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器31还可以既包括所述终端设备3的内部存储单元也包括外部存储设备。所述存储器31用于存储所述计算机程序以及所述终端设备所需的其他程序和数据。所述存储器31还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种日志处理方法,其特征在于,包括:
将应用线程的日志信息存入日志缓存队列;其中所述应用线程为运行应用程序的应用功能的线程;
通过日志队列管理线程,每隔第一预设时间段从所述日志缓存队列中获取所述日志信息,并写入目标日志文件,其中所述日志队列管理线程为提前在所述应用程序中创建的独立于所述应用线程的线程;
通过日志刷新线程,每隔第二预设时间段刷新所述目标日志文件,以保证所述日志队列管理线程写入所述目标日志文件中的日志信息存储至所述目标日志文件中;其中,所述日志刷新线程为提前在所述应用程序中创建的独立于所述应用线程及所述日志队列管理线程的线程,所述第二预设时间段大于所述第一预设时间段。
2.如权利要求1所述的日志处理方法,其特征在于,所述通过日志队列管理线程,每隔第一预设时间段从所述日志缓存队列中获取所述日志信息,并写入目标日志文件,包括:通过所述日志队列管理线程,执行以下的写入流程:
从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件;
置位刷新标志;所述刷新标志用于指示所述日志刷新线程刷新所述目标日志文件;
间隔第一预设时间后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
对应地,所述通过日志刷新线程,每隔第二预设时间段刷新所述目标日志文件,包括:通过所述日志刷新线程,执行以下的刷新流程:
检测所述刷新标志是否处于置位状态;
若检测到所述刷新标志处于置位状态,则将所述刷新标志恢复为清零状态;
通过刷新函数刷新所述目标日志文件;
间隔第二预设时间后,返回执行所述检测所述刷新标志是否处于置位状态的步骤以及后续的步骤。
3.如权利要求2所述的日志处理方法,其特征在于,在所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件之前,还包括:
创建并打开新的日志文件作为当前的目标日志文件;
对应地,所述间隔第一预设时间后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤,包括:
若所述目标日志文件的文件大小小于预设文件大小,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;
否则,关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤。
4.如权利要求3所述的日志处理方法,其特征在于,所述若所述目标日志文件的文件大小小于预设文件大小,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤,包括:
若检测到文件满标志处于清零状态,则间隔第一预设时间段后,返回执行所述从所述日志缓存队列中获取日志信息,并通过写入函数将所述日志信息写入所述目标日志文件的步骤以及后续的步骤;其中,所述文件满标志在当前的所述目标日志文件创建时初始为清零状态,并在日志刷新线程检测到当前的目标日志文件的文件大小大于或者等于预设文件大小时置位。
5.如权利要求4所述的日志处理方法,其特征在于,所述关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤,包括:
若检测到所述文件满标志处于置位状态,则关闭所述目标日志文件,并返回执行所述创建并打开新的日志文件作为当前的目标日志文件的步骤以及后续步骤。
6.如权利要求4所述的日志处理方法,其特征在于,所述刷新流程中,在所述通过刷新函数刷新所述目标日志文件之前,还包括:
获取所述目标日志文件的文件大小并与预设文件大小进行比较;
对应地,所述通过刷新函数刷新所述目标日志文件,包括:
若所述目标日志文件的文件大小小于预设文件大小,则通过刷新函数刷新所述目标日志文件;否则,将所述文件满标志置位。
7.如权利要求3所述的日志处理方法,其特征在于,所述目标日志文件存放于目标文件目录中,各个所述目标日志文件的文件名为整数值,且所述整数值根据所述目标日志文件创建时间的先后从小到大递增,对应地,所述创建并打开新的日志文件作为当前的目标日志文件,包括:
打开所述目标文件目录;
从所述目标文件目录中确定文件名为整数值的所述目标日志文件,并从各个所述目标日志文件的文件名中找出最大的整数值;
将所述最大的整数值加上预设值作为新的文件名;
根据所述新的文件名,创建并打开新的日志文件作为当前的目标日志文件。
8.如权利要求7所述的日志处理方法,其特征在于,所述方法还包括:
若检测到所述目标文件目录存储的目标日志文件的总数大于或者等于第一预设数目,则根据所述目标文件目录中文件名的整数值,按照所述整数值从小到大的顺序选取第二预设数目个目标日志文件,并删除选取的所述第二预设数目个目标日志文件。
9.如权利要求1~8任一项所述的日志处理方法,其特征在于,所述应用线程的数目为一个以上,所述将应用线程的日志信息存入日志缓存队列,包括:
若所述应用线程存在需要打印的日志信息且日志打印接口的互斥锁处于解锁状态,则:
调用所述日志打印接口,并将所述日志打印接口的互斥锁设置为加锁状态;
通过所述日志打印接口,将所述应用程序的日志信息存入所述日志缓存队列;
将所述日志打印接口的互斥锁设置为解锁状态。
10.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,当所述处理器执行所述计算机程序时,使得终端设备实现如权利要求1至9任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011187541.1A CN112306980A (zh) | 2020-10-30 | 2020-10-30 | 日志处理方法及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011187541.1A CN112306980A (zh) | 2020-10-30 | 2020-10-30 | 日志处理方法及终端设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112306980A true CN112306980A (zh) | 2021-02-02 |
Family
ID=74332449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011187541.1A Pending CN112306980A (zh) | 2020-10-30 | 2020-10-30 | 日志处理方法及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112306980A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113377641A (zh) * | 2021-06-24 | 2021-09-10 | 上海哔哩哔哩科技有限公司 | 日志统计方法及系统 |
CN114915587A (zh) * | 2022-05-10 | 2022-08-16 | 深圳星云智联科技有限公司 | 流表老化管理方法及相关设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016180265A1 (zh) * | 2015-05-13 | 2016-11-17 | 阿里巴巴集团控股有限公司 | 日志事件处理方法和装置 |
CN109491974A (zh) * | 2018-10-12 | 2019-03-19 | 上海金大师网络科技有限公司 | 异步日志管理方法和系统及计算机可读存储介质 |
CN110888769A (zh) * | 2018-09-07 | 2020-03-17 | 华为技术有限公司 | 数据处理方法及计算机设备 |
CN111045782A (zh) * | 2019-11-20 | 2020-04-21 | 北京奇艺世纪科技有限公司 | 日志处理方法、装置、电子设备和计算机可读存储介质 |
-
2020
- 2020-10-30 CN CN202011187541.1A patent/CN112306980A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016180265A1 (zh) * | 2015-05-13 | 2016-11-17 | 阿里巴巴集团控股有限公司 | 日志事件处理方法和装置 |
CN110888769A (zh) * | 2018-09-07 | 2020-03-17 | 华为技术有限公司 | 数据处理方法及计算机设备 |
CN109491974A (zh) * | 2018-10-12 | 2019-03-19 | 上海金大师网络科技有限公司 | 异步日志管理方法和系统及计算机可读存储介质 |
CN111045782A (zh) * | 2019-11-20 | 2020-04-21 | 北京奇艺世纪科技有限公司 | 日志处理方法、装置、电子设备和计算机可读存储介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113377641A (zh) * | 2021-06-24 | 2021-09-10 | 上海哔哩哔哩科技有限公司 | 日志统计方法及系统 |
CN113377641B (zh) * | 2021-06-24 | 2022-11-04 | 上海哔哩哔哩科技有限公司 | 日志统计方法及系统 |
CN114915587A (zh) * | 2022-05-10 | 2022-08-16 | 深圳星云智联科技有限公司 | 流表老化管理方法及相关设备 |
CN114915587B (zh) * | 2022-05-10 | 2023-12-22 | 深圳星云智联科技有限公司 | 流表老化管理方法及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10599637B2 (en) | Granular buffering of metadata changes for journaling file systems | |
US8990510B2 (en) | Read-copy update system and method | |
US11386065B2 (en) | Database concurrency control through hash-bucket latching | |
US10268610B1 (en) | Determining whether a CPU stalling a current RCU grace period had interrupts enabled | |
CN112306980A (zh) | 日志处理方法及终端设备 | |
KR20200135718A (ko) | 액세스 요청을 관리하기 위한 방법, 장치, 기기 및 저장 매체 | |
CN111090663A (zh) | 事务并发控制方法、装置、终端设备及介质 | |
CN115408411A (zh) | 数据写入方法、装置、电子设备及存储介质 | |
US9223690B2 (en) | Freeing memory safely with low performance overhead in a concurrent environment | |
WO2006130768A2 (en) | Transactional file system with client partitioning | |
GB2497172A (en) | Reserving space on a storage device for new data based on predicted changes in access frequencies of storage devices | |
CN111984379B (zh) | 读写事务控制方法、系统、终端设备及存储介质 | |
US8341368B2 (en) | Automatic reallocation of structured external storage structures | |
US9208080B2 (en) | Persistent memory garbage collection | |
CN111752715A (zh) | 大量请求量下的系统优化方法、装置、设备及存储介质 | |
US9135058B2 (en) | Method for managing tasks in a microprocessor or in a microprocessor assembly | |
CN115469810A (zh) | 一种数据获取方法、装置、设备及存储介质 | |
CN111143351B (zh) | Imsi数据管理方法及设备 | |
US7769976B2 (en) | Identifying code that wastes virtual memory | |
CN112328550A (zh) | 一种分布式文件系统架构下的文件管理方法及装置 | |
CN113849119A (zh) | 存储方法、存储装置和计算机可读存储介质 | |
CN112131009B (zh) | 一种内存调度方法、装置及计算机可读存储介质 | |
CN107562642B (zh) | 检查点淘汰方法和装置 | |
CN116909485A (zh) | 数据回写方法、装置、电子设备及计算机可读存储介质 | |
US8688662B2 (en) | Copy on access to locked objects |
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 |
Application publication date: 20210202 |
|
RJ01 | Rejection of invention patent application after publication |