一种日志文件的生成方法和装置与流程

文档序号:11285789阅读:237来源:国知局
一种日志文件的生成方法和装置与流程

本发明涉及计算机技术领域,特别是涉及一种日志文件的生成方法和装置。



背景技术:

日志文件是用于收集bug(漏洞)或者跟踪用户操作轨迹的文件。

目前,通常采用调用io(input/output,输入/输出)api(applicationprogramminginterface,应用程序编程接口)的方式生成日志文件。具体的,使用fileoutputstream(文件输出流)以字节为单位,读取应用程序的运行状态,并根据读取到的信息生成日志文件。

在现有技术中,为了防止由于主线程被阻塞而造成的日志生成延时或失败,需要设置独立的线程,用以调用ioapi,进而能够及时读取应用程序的运行状态,并生成日志文件。

可见,现有技术中生成日志文件的方式由于需要设置独立线程,而占用了过多的系统资源,并且,如果该线程被强制关闭,容易造成日志文件丢失的现象。



技术实现要素:

本发明要解决的技术问题是提供一种日志文件的生成方法和装置,用以解决现有写日志方式影响性能且容易丢失的问题。

根据上述技术问题,本发明是通过以下技术方案来解决的:

本发明提供了一种日志文件的生成方法,包括:调用非阻塞输入/输出接口nio为应用程序映射缓存区域;将运行所述应用程序所产生的数据写入到所述缓存区域中;根据所述缓存区域中的数据,生成与所述应用程序对应的日志文件。

其中,所述调用nio为所述应用程序映射缓存区域,包括:在使用一个账号登录所述应用程序时,调用所述nio为所述应用程序映射缓存区域。

其中,在使用一个账号登录所述应用程序时,调用所述nio为所述应用程序映射缓存区域之后,将运行所述应用程序所产生的数据写入到所述缓存区域中之前,还包括:在切换到另一账号登录所述应用程序时,调用所述nio为以当前账号登录的所述应用程序映射新的缓存区域;所述将运行所述应用程序所产生的数据写入到所述缓存区域中,包括:在切换到所述另一账号登录所述应用程序后,将运行以当前账号登录的所述应用程序所产生的数据写入到所述已映射的新的缓存区域中。

其中,所述根据所述缓存区域中的数据,生成与所述应用程序对应的日志文件,包括:如果所述应用程序进行了登录账号切换,则根据所述应用程序先、后映射的缓存区域中的数据,采用链表模式,为所述应用程序生成前一个账号和后一个账号分别对应的日志文件。

其中,所述采用链表模式,为所述应用程序生成前一个账号和后一个账号分别对应的日志文件,包括:在前一个账号对应的日志文件中,记录后一个账号对应的日志文件的信息;在后一个账号对应的日志文件中,记录前一个账号对应的日志文件的信息。

其中,所述调用nio为所述应用程序映射缓存区域,包括:调用所述nio,为使用当前账号登录的所述应用程序分配文件通道filechannel;通过所述filechannel为使用当前账号的所述应用程序映射缓存区域;所述将运行所述应用程序所产生的数据写入到所述缓存区域中,包括:利用与所述filechannel对应的内存映射mappedbytebuffer将以当前账号登录的所述应用程序所产生的数据写入所述缓存区域中。

其中,所述将运行所述应用程序所产生的数据写入到所述缓存区域中,包括:通过多个线程将运行所述应用程序所产生的数据写入到所述缓存区域中。

其中,所述根据所述缓存区域中的数据,生成与所述应用程序对应的日志文件,包括:在所述缓存区域被写满或者被回收时,将所述缓存区域中的数据写入日志文件中,生成所述应用程序对应的日志文件。

其中,所述方法还包括:根据用户提供的账号信息以及使用时间,查询日志文件;其中,所述日志文件的名称包括:所述应用程序使用的账号信息以及所述应用程序产生日志数据的时间信息。

本发明还提供了一种日志文件的生成装置,包括:映射模块,用于调用非阻塞输入/输出接口nio为应用程序映射缓存区域;写入模块,用于将运行所述应用程序所产生的数据写入到所述缓存区域中;生成模块,用于根据所述缓存区域中的数据,生成与所述应用程序对应的日志文件。

其中,所述映射模块,用于在使用一个账号登录所述应用程序时,调用所述nio为所述应用程序映射缓存区域。

其中,所述映射模块,还用于在使用一个账号登录所述应用程序时,调用所述nio为所述应用程序映射缓存区域之后,将运行所述应用程序所产生的数据写入到所述缓存区域中之前,在切换到另一账号登录所述应用程序时,调用所述nio为以当前账号登录的所述应用程序映射新的缓存区域;所述写入模块,用于在切换到所述另一账号登录所述应用程序后,将运行以当前账号登录的所述应用程序所产生的数据写入到所述已映射的新的缓存区域中。

其中,所述生成模块,用于:如果所述应用程序进行了登录账号切换,则根据所述应用程序先、后映射的缓存区域中的数据,采用链表模式,为所述应用程序生成前一个账号和后一个账号分别对应的日志文件。

其中,所述生成模块,用于:在前一个账号对应的日志文件中,记录后一个账号对应的日志文件的信息;在后一个账号对应的日志文件中,记录前一个账号对应的日志文件的信息。

其中,所述映射模块,用于调用所述nio,为使用当前账号登录的所述应用程序分配文件通道filechannel;通过所述filechannel为使用当前账号的所述应用程序映射缓存区域;所述写入模块,用于利用与所述filechannel对应的内存映射mappedbytebuffer将以当前账号登录的所述应用程序所产生的数据写入所述缓存区域中。

其中,所述写入模块,用于通过多个线程将运行所述应用程序所产生的数据写入到所述缓存区域中。

其中,所述生成模块,用于在所述缓存区域被写满或者被回收时,将所述缓存区域中的数据写入日志文件中,生成所述应用程序对应的日志文件。

其中,所述装置还包括查询模块;所述查询模块,用于根据用户提供的账号信息以及使用时间,查询日志文件;其中,所述日志文件的名称包括:所述应用程序使用的账号信息以及所述应用程序产生日志数据的时间信息。

本发明有益效果如下:

本发明通过nio的方式为应用程序映射缓存区域,并在缓存区域中写入运行应用程序所产生的数据,避免了由于主线程被阻塞而造成的日志生成延时或失败的问题,本发明也无需设置用于生成日志文件的独立线程,可以节省系统资源,避免了在写日志的过程中,因独立线程被强制关闭而造成的日志文件丢失问题。进一步地,本发明可以实现日志文件的精确定位。

附图说明

图1是根据本发明一实施例的日志文件的生成方法的流程图;

图2是根据本发明一实施例的日志文件的示意图;

图3是根据本发明一实施例的日志文件的生成装置的结构图。

具体实施方式

以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。

本发明实施例提供一种日志文件的生成方法。图1是根据本发明一实施例的日志文件的生成方法的流程图。

步骤s110,调用nio(no-blockinginput/output,非阻塞输入/输出接口)为应用程序映射缓存区域。

在本实施例中,应用程序依赖于账号,用户需要使用账号登录应用程序。

调用nio为所述应用程序映射缓存区域,包括:在使用一个账号登录所述应用程序时,调用nio为所述应用程序映射缓存区域,并且在使用一个账号登录所述应用程序时,调用所述nio为所述应用程序映射缓存区域之后,将运行所述应用程序所产生的数据写入到所述缓存区域中之前,还包括:在切换到另一账号登录所述应用程序时,调用所述nio为以当前账号登录的所述应用程序映射新的缓存区域。

本实施例通过将数据写入该缓存区域的方式,可以在应用程序运行过程中不必考虑线程阻塞的问题以及线程被强制关闭的问题。

步骤s120,将运行所述应用程序所产生的数据写入到所述缓存区域中。

在所述应用程序切换账号前,将运行所述应用程序所产生的数据写入为所述应用程序映射的缓存区域。

在所述应用程序切换账号后,将运行所述应用程序所产生的数据写入为所述应用程序映射的新的缓存区域。换言之,在切换到另一账号登录所述应用程序后,将运行以当前账号登录的所述应用程序所产生的数据写入到所述已映射的新的缓存区域中。

在本实施例中,采用文件通道filechannel和内存映射mappedbytebuffer相结合的nio方式写日志。其中,filechannel与mappedbytebuffer一一对应。进一步地,调用nio,为使用当前账号的所述应用程序分配filechannel;通过所述filechannel为使用当前账号登录的所述应用程序映射缓存区域;利用与所述filechannel对应的mappedbytebuffer将以当前账号登录的所述应用程序所产生的数据写入所述缓存区域中。

具体的,在使用一个账号启动应用程序时,可以调用nio为该应用程序分配filechannel,该filechannel为使用当前账号的所述应用程序映射缓存区域,在运行所述应用程序的过程中,与所述filechannel对应的mappedbytebuffer将所述应用程序在所述账号下产生的数据写入所述缓存区域中。在应用程序切换账号时,可以调用nio为给应用程序分配新的filechannel,该新的filechannel为使用新账号的所述应用程序映射新的缓存区域,在运行所述应用程序的过程中,与该新的filechannel对应的mappedbytebuffer将所述应用程序在所述新账号下产生的数据写入所述新的缓存区域中。

本实施例的这种nio的方式支持多线程并发读写,即本实施例支持多个线程调用nio,这样本实施例可以通过多个线程将运行所述应用程序所产生的数据写入到所述缓存区域中。

步骤s130,根据所述缓存区域中的数据,生成与所述应用程序对应的日志文件。

在本实施例中,可以在所述缓存区域被写满或者被回收时,将所述缓存区域中的数据写入日志文件中,生成所述应用程序对应的日志文件。

在本实施例中,如果应用程序进行了账号切换,则根据所述应用程序先、后映射的缓存区域中的数据,采用链表模式,为所述应用程序生成前一个账号和后一个账号分别对应的日志文件。其中,所述日志文件的名称包括:所述应用程序使用的账号信息以及所述应用程序产生日志数据的时间信息。

具体的,应用程序在账号切换之前应用程序使用前一个账号a,应用程序在账号切换之后应用程序使用后一个账号b。

当应用程序使用前一个账号a时,nio会为应用程序映射一个缓存区域,在该缓存区域中写入运行应用程序产生的数据,并根据该缓存区域中的数据生成与该应用程序对应的日志文件,并根据该应用程序使用的账号信息和产生数据的时间信息,为该日志文件命名。日志文件的名称例如是:账号a_20161126120000.log(账号a_2016年11月26日12点00分00秒)。

在应用程序改为使用后一个账号b时,nio会为应用程序重新映射一个缓存区域,并在该新的缓存区域中写入运行应用程序新产生的数据,并根据该新的缓存区域中的数据生成该应用程序对应的日志文件,并根据应用程序使用的账号信息和产生数据的时间信息,为该日志文件命名。日志文件的名称例如是:账号b_20161126131420.log(账号b_2016年11月26日13点14分20秒)。

为了使应用程序的日志文件之间能够衔接,采用链表模式,在前一个账号对应的日志文件中,记录后一个账号对应的日志文件的信息;在后一个账号对应的日志文件中,记录前一个账号对应的日志文件的信息。例如:在账号切换时,在前一个账号对应的缓存区域写入后一个账号对应的日志文件的信息,在后一个账号对应的缓存区域写入前一个账号对应的日志文件的信息,这样在分别为应用程序的前一个账号和后一个账号分别生成日志文件时,可以在前一个账号对应的日志文件的末尾,记录后一个账号对应的日志文件的信息;在后一个账号对应的日志文件的开头记录前一个账号信息对应的日志文件的信息。

在本实施例中,采用filechannel和mappedbytebuffer相结合的nio方式写日志,可以提高写日志的效率,还可以避免独立线程崩溃或被杀(结束)时造成的日志文件丢失的问题。

在本实施例中,根据用户提供的账号信息以及使用时间,查询日志文件;其中,所述日志文件的名称包括:应用程序使用的账号信息以及该应用程序产生数据的时间信息。这样在出现问题时,用户仅需提供需要查询的账号和时间就可以查询到对应的日志文件。进一步地,根据用户提供的账号进行日志文件查询,在查询到的日志文件中获取与用户提供的时间最接近的日志文件并提供给用户,从而实现了高效的日志定位分析。

如图2所示,应用程序先使用账号a运行,进而可以生成名为“账号a_20161126120000.log”的日志文件,应用程序切换到账号b运行,进而可以生成名为“账号b_20161126131420.log”日志文件,为了使两个日志文件衔接上,采用链表模式,在名为“账号a_20161126120000.log”的日志文件的结尾记录“账号b_20161126131420.log”的日志文件的信息,在名为“账号b_20161126131420.log”的日志文件的开头记录“账号a_20161126120000.log”日志文件的信息,以此达到整个日志文件的贯通性,并且可以根据用户提供的账号信息和时间信息,精确地定位到具体的日志文件,根据日志文件整理出用户的操作轨迹,实现高效的日志定位分析。

在本实施例中,本实施例的执行主体不限于移动终端、服务器等设备。本实施例后台系统可以是android(安卓)系统。

在本实施例中,后台系统可以定期清理日志文件,例如:每个月清理上个月的日志文件,以防止无用日志文件占用过多体积。

本发明实施例还提供了一种日志文件的生成装置。图3是根据本发明一实施例的日志文件的生成装置的结构图。

该日志文件的生成装置,包括:

映射模块310,用于调用非阻塞输入/输出接口nio为应用程序映射缓存区域。

写入模块320,用于将运行所述应用程序所产生的数据写入到所述缓存区域中。

生成模块330,用于根据所述缓存区域中的数据,生成与所述应用程序对应的日志文件。

可选地,所述映射模块310,用于在使用一个账号登录所述应用程序时,调用所述nio为所述应用程序映射缓存区域。

可选地,所述映射模块310,还用于在使用一个账号登录所述应用程序时,调用所述nio为所述应用程序映射缓存区域之后,将运行所述应用程序所产生的数据写入到所述缓存区域中之前,在切换到另一账号登录所述应用程序时,调用所述nio为以当前账号登录的所述应用程序映射新的缓存区域;所述写入模块320,用于在切换到所述另一账号登录所述应用程序后,将运行以当前账号登录的所述应用程序所产生的数据写入到所述已映射的新的缓存区域中。

可选地,所述生成模块320,用于如果所述应用程序进行了登录账号切换,则根据所述应用程序先、后映射的缓存区域中的数据,采用链表模式,为所述应用程序生成前一个账号和后一个账号分别对应的日志文件。

可选地,所述生成模块320,用于:在前一个账号对应的日志文件中,记录后一个账号对应的日志文件的信息;在后一个账号对应的日志文件中,记录前一个账号对应的日志文件的信息。

可选地,所述映射模块310,用于调用所述nio,为使用当前账号登录的所述应用程序分配文件通道filechannel;通过所述filechannel为使用当前账号的所述应用程序映射缓存区域;所述写入模块320,用于利用与所述filechannel对应的内存映射mappedbytebuffer将以当前账号登录的所述应用程序所产生的数据写入所述缓存区域中。

可选地,所述写入模块320,用于通过多个线程将运行所述应用程序所产生的数据写入到所述缓存区域中。

可选地,所述生成模块330,用于在所述缓存区域被写满或者被回收时,将所述缓存区域中的数据写入日志文件中,生成所述应用程序对应的日志文件。

可选地,所述装置还包括查询模块(图中未示出);所述查询模块,用于根据用户提供的账号信息以及使用时间,查询日志文件;其中,所述日志文件的名称包括:所述应用程序使用的账号信息以及所述应用程序产生日志数据的时间信息。

本实施例所述的装置的功能已经在图1~图2所示的方法实施例中进行了描述,故本实施例的描述中未详尽之处,可以参见前述实施例中的相关说明,在此不做赘述。

尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1