基于双线程的日志输出方法及装置制造方法及图纸

技术编号:15436998 阅读:38 留言:0更新日期:2017-05-25 19:13
本发明专利技术提供一种基于双线程的日志输出方法及装置。该方法包括:接收日志调用请求,将日志调用请求中的日志文本数据存储在线程循环队列中;将线程循环队列中存储的日志文本数据写入阻塞队列,阻塞队列为内存缓冲区;监听阻塞队列的容量和写入操作,若监听到阻塞队列没有写入操作或者达到容量阈值,则触发日志的输入输出线程,将阻塞队列中当前所有的日志文本数据一次性写入日志文件。从而,内存缓冲区数据写入日志文件的频率低,降低了处理日志使用的线程数,对系统I/O压力小,实现了用较少的CPU和线程资源实现日志的重定向,提高应用内UI交互的响应性能。

Log output method and device based on double thread

The invention provides a log output method and device based on double threads. The method includes: receiving a call request log, the log request in log text data stored in the thread in the circular queue; the log text data stored in the circular queue thread write blocking queue, blocking queue is a memory buffer capacity; monitoring of the blocking queue and write operations, if listening to write or not blocking queue achieve the capacity threshold, the trigger input and output thread log, the blocking queue all current log text data one-time log file. Thus, the memory buffer data to a log file of low frequency, reduce the number of threads used for log processing, I/O system pressure is small, can redirect log with less CPU and thread resources, improve the response performance of application of UI interaction.

【技术实现步骤摘要】
基于双线程的日志输出方法及装置
本专利技术涉及通信
,尤其涉及一种基于双线程的日志输出方法及装置。
技术介绍
开发人员了解应用程序(Application,简称:APP)的运行状况,其中一种常规的方法是通过日志,将日志进行重定向,输出至指定的日志文件进行统一收集。现有技术中,在日志输出的时候,启动一个线程,在该线程中打开日志文件,接着把日志数据写入到日志文件中,最后关闭日志文件,结束线程。因此,每写一条日志,就需要经历一次日志文件的流程“打开文件句柄--写入数据—关闭文件句柄”。但是,当大量连续的日志输出时,通过上述日志输出方法,容易导致读写文件频繁,给系统输入输出(I/O)带来压力,且处理日志使用的线程数过多,会消耗移动设备宝贵的线程资源,降低CPU分配给业务处理的时间片。
技术实现思路
本专利技术提供一种基于双线程的日志输出方法及装置,以解决现有日志输出方法易导致读写文件频繁,系统I/O压力大的问题。第一方面,本专利技术提供一种基于双线程的日志输出方法,包括:接收日志调用请求,将所述日志调用请求中的日志文本数据存储在线程循环队列中;将所述线程循环队列中存储的日志文本数据写入阻塞队列,所述阻塞队列为内存缓冲区;监听所述阻塞队列的容量和写入操作,若监听到所述阻塞队列没有写入操作或者达到容量阈值,则触发日志的输入输出线程,将所述阻塞队列中当前所有的日志文本数据一次性写入日志文件。进一步地,所述将所述阻塞队列中当前所有的日志文本数据一次性写入日志文件,包括:打开日志文件句柄,从所述阻塞队列中依次获取当前所有的日志文本数据,依次写入每一日志文本数据到所述日志文件中,当前所有的日志文本数据写入所述日志文件结束时,关闭所述日志文件句柄。进一步地,所述接收日志调用请求之前,还包括:设置所述线程循环队列的线程优先级低于业务处理的优先级。进一步地,所述监听到所述阻塞队列没有写入操作,包括:监听到所述阻塞队列在预设时间内没有写入操作。第二方面,本专利技术提供一种基于双线程的日志输出装置,包括:接收模块,用于接收日志调用请求;线程循环队列,用于存储所述日志调用请求中的日志文本数据;阻塞队列,用于存储所述线程循环队列中的日志文本数据,所述阻塞队列为内存缓冲区;触发模块,用于监听所述阻塞队列的容量和写入操作,若监听到所述阻塞队列没有写入操作或者达到容量阈值,则触发日志的输入输出线程;日志写入模块,用于将所述阻塞队列中当前所有的日志文本数据一次性写入日志文件。进一步地,所述日志写入模块具体用于:打开日志文件句柄,从所述阻塞队列中依次获取当前所有日志文本数据,依次写入每一日志文本数据到所述日志文件中,当前所有日志文本数据写入所述日志文件结束时,关闭所述日志文件句柄。进一步地,还包括:设置模块,用于在所述接收模块接收日志调用请求之前,设置所述线程循环队列的线程优先级低于业务处理的优先级。进一步地,所述触发模块具体用于:监听到所述阻塞队列在预设时间内没有写入操作。本专利技术提供的基于双线程的日志输出方法及装置,通过接收日志调用请求后,使用一个线程将日志调用请求中的日志文本数据写入内存缓冲区,一个线程监听内存缓冲区在没有写入操作或者达到容量阈值时将内存缓冲区中的日志文本数据一次性写入日志文件中,日志缓存和写入分别在两个工作子线程中。从而,内存缓冲区数据写入日志文件的频率低,降低了处理日志使用的线程数,对系统I/O压力小,实现了用较少的CPU和线程资源实现日志的重定向,提高应用内UI交互的响应性能。附图说明为了更清楚地说明本专利技术或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术基于双线程的日志输出方法实施例一的流程图;图2为本专利技术基于双线程的日志输出方法实施例二的交互流程图;图3为本专利技术基于双线程的日志输出装置实施例一的结构示意图;图4为本专利技术基于双线程的日志输出装置实施例二的结构示意图。具体实施方式为使本专利技术的目的、技术方案和优点更加清楚,下面将结合本专利技术中的附图,对本专利技术中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。图1为本专利技术基于双线程的日志输出方法实施例一的流程图,本实施例的执行主体可以为终端设备,如手机、IPAD等电子设备,如图1所示,本实施例的方法可以包括:S101、接收日志调用请求,将日志调用请求中的日志文本数据存储在线程循环队列中。其中,线程循环队列用于按照队列先入先出存储接收到的日志调用请求中的日志文本数据,在日志输出的时候,要启动一个线程,该日志调用请求就是日志输出前的线程调用请求。S102、将线程循环队列中存储的日志文本数据写入阻塞队列,阻塞队列为内存缓冲区。其中,内存缓冲区例如为高速内存缓冲区。S103、监听阻塞队列的容量和写入操作,若监听到阻塞队列没有写入操作或者达到容量阈值,则触发日志的输入输出线程,将阻塞队列中当前所有的日志文本数据一次性写入日志文件。具体地,若监听到阻塞队列没有写入操作或者达到容量阈值,将阻塞队列中当前所有的日志文本数据一次性写入日志文件,具体可以为:打开日志文件句柄,从阻塞队列中依次获取当前所有的日志文本数据,依次写入每一线程对应的日志数据到日志文件中,当前所有的日志文本数据写入日志文件结束时,关闭日志文件句柄。其中的容量阈值例如为阻塞队列容量的80%或者90%等等。从而,阻塞队列中当前所有的日志文本数据一次性全部写入日志文件,而日志文件句柄的打开和关闭只需各执行一次,因此日志文本数据写入日志文件的频率低,对系统的I/O压力小。进一步地,监听到阻塞队列没有写入操作,可以为:监听到阻塞队列在预设时间内没有写入操作,预设时间可以是预设的一个时间段,如5S。本实施例中,可以看出,采用本实施例的日志输出方法,双线程异步写数据,一个线程负责将日志调用请求中的日志文本数据写入内存缓冲区,一个线程负责监听内存缓冲区在满足触发条件时将内存缓冲区中的日志文本数据一次性写入日志文件中,日志缓存和写入分别在两个工作子线程中,缓冲区数据写入日志文件(即磁盘文件)的频率低,降低了处理日志使用的线程数,对系统I/O压力小,用较少的CPU和线程资源实现日志的重定向,提高应用内用户界面(UserInterface,简称:UI)交互的响应性能。进一步地,在S101中接收日志调用请求之前,还可以包括:设置线程循环队列的线程优先级低于业务处理的优先级。从而终端设备在同时接收到日志调用请求和业务处理请求时,可以优先处理业务,不影响业务处理的时间。本实施例提供的基于双线程的日志输出方法,通过接收日志调用请求后,使用一个线程将日志调用请求中的日志文本数据写入内存缓冲区,一个线程监听内存缓冲区在没有写入操作或者达到容量阈值时将内存缓冲区中的日志文本数据一次性写入日志文件中,日志缓存和写入分别在两个工作子线程中。从而,内存缓冲区数据写入日志文件的频率低,降低了处理日志使用的线程数,对系统I/本文档来自技高网...
基于双线程的日志输出方法及装置

【技术保护点】
一种基于双线程的日志输出方法,其特征在于,包括:接收日志调用请求,将所述日志调用请求中的日志文本数据存储在线程循环队列中;将所述线程循环队列中存储的日志文本数据写入阻塞队列,所述阻塞队列为内存缓冲区;监听所述阻塞队列的容量和写入操作,若监听到所述阻塞队列没有写入操作或者达到容量阈值,则触发日志的输入输出线程,将所述阻塞队列中当前所有的日志文本数据一次性写入日志文件。

【技术特征摘要】
1.一种基于双线程的日志输出方法,其特征在于,包括:接收日志调用请求,将所述日志调用请求中的日志文本数据存储在线程循环队列中;将所述线程循环队列中存储的日志文本数据写入阻塞队列,所述阻塞队列为内存缓冲区;监听所述阻塞队列的容量和写入操作,若监听到所述阻塞队列没有写入操作或者达到容量阈值,则触发日志的输入输出线程,将所述阻塞队列中当前所有的日志文本数据一次性写入日志文件。2.根据权利要求1所述的方法,其特征在于,所述将所述阻塞队列中当前所有的日志文本数据一次性写入日志文件,包括:打开日志文件句柄,从所述阻塞队列中依次获取当前所有的日志文本数据,依次写入每一日志文本数据到所述日志文件中,当前所有的日志文本数据写入所述日志文件结束时,关闭所述日志文件句柄。3.根据权利要求1或2所述的方法,其特征在于,所述接收日志调用请求之前,还包括:设置所述线程循环队列的线程优先级低于业务处理的优先级。4.根据权利要求1或2所述的方法,其特征在于,所述监听到所述阻塞队列没有写入操作,包括:监听到所述阻塞队列在预设时间内没有写入操作。5....

【专利技术属性】
技术研发人员:吴朝彬
申请(专利权)人:北京五八信息技术有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1