存储日志的方法、装置和计算机设备与流程

文档序号:22928952发布日期:2020-11-13 16:26阅读:173来源:国知局
存储日志的方法、装置和计算机设备与流程

本申请涉及存储技术领域,特别涉及一种存储日志的方法、装置和计算机设备。



背景技术:

随着网络技术的发展,网络设备可以连接到其他网络设备以提供或获取服务。一个常见的场景是,安装有客户端的网络设备经由网络访问安装有服务端的网络设备,以使用服务端的数据库。客户端对服务端的数据库的所有操作(如数据更新、数据删除等)均会产生操作日志。

目前,客户端对服务端的数据库的操作日志由服务端进行存储。服务端可以根据存储的操作日志实现回滚或数据恢复。但是,当多个网络设备中每个网络设备的客户端均使用服务端的数据库时,在服务端的数据库出现异常的情况下,服务端发起回滚或数据恢复时将会影响每个客户端。而由于操作日志存储在服务端,所以客户端不能主动发起回滚或者数据恢复。



技术实现要素:

本申请提供了一种存储日志的方法、装置和计算机设备,可以使第一网络设备将对第二网络设备的操作日志有序地存储下来。

一方面,提供了一种存储日志的方法,应用于运行有多个进程的第一网络设备,所述方法包括:

创建所述多个进程的共享内存,所述共享内存中存储有日志索引,所述共享内存每次仅允许一个进程访问,所述日志索引每次被申请时自动递增;

对于所述多个进程中的任意一个进程,若所述一个进程在运行期间产生对第二网络设备的操作日志,则从所述共享内存中获取所述一个进程对应的日志索引;

根据所述一个进程对应的日志索引,将所述操作日志存储到本地日志文件。

可选地,所述本地日志文件包括一个或多个日志文件,每个日志文件包括多个日志记录,每个日志记录包含日志索引,所述每个日志记录用于存储操作日志,所述每个日志文件包含的多个日志记录中的日志索引按序增大。

可选地,所述创建所述多个进程的共享内存,包括:

创建共享内存,并将所述共享内存映射到所述多个进程中每个进程的地址空间;

将日志索引存储到所述共享内存中,并将所述共享内存中的日志索引初始化为0;

从所述本地日志文件中存储有操作日志的日志记录中确定日志索引最大的一个日志记录;

若所述共享内存中的日志索引小于所述一个日志记录中的日志索引,则将所述共享内存中的日志索引更新为所述一个日志记录中的日志索引。

可选地,所述每个日志记录的大小均为参考字节数,所述根据所述一个进程对应的日志索引,将所述操作日志存储到本地日志文件,包括:

判断是否已打开目标日志文件,所述目标日志文件为包含有所述一个进程对应的日志索引的日志文件;

若已打开所述目标日志文件,则根据所述一个进程对应的日志索引和所述参考字节数,从所述目标日志文件中确定目标日志记录;

将所述操作日志存储到所述目标日志记录。

可选地,所述判断是否已打开目标日志文件之后,还包括:

若未打开所述目标日志文件,则关闭当前打开的日志文件;

若所述本地日志文件中不存在所述目标日志文件,则创建并打开所述目标日志文件,并返回所述判断是否已打开目标日志文件的步骤;

若所述本地日志文件中存在所述目标日志文件,则打开所述目标日志文件,并返回所述判断是否已打开目标日志文件的步骤。

可选地,所述根据所述一个进程对应的日志索引和所述参考字节数,从所述目标日志文件中确定目标日志记录,包括:

将所述一个进程对应的日志索引减去所述目标日志文件中的起始日志索引,得到索引差值;

将所述索引差值乘以所述参考字节数后得到的数值与所述目标日志文件的文件头的字节数相加,得到第一位置;

将所述目标日志文件中处于所述第一位置的后一位的位置作为第二位置;

将起始位置为所述第二位置的日志记录确定为目标日志记录。

可选地,所述将所述操作日志存储到所述目标日志记录,包括:

生成所述操作日志的校验码;

将所述操作日志和所述操作日志的校验码均存储到所述目标日志记录。

一方面,提供了一种存储日志的装置,应用于运行有多个进程的第一网络设备,所述装置包括:

创建模块,用于创建所述多个进程的共享内存,所述共享内存中存储有日志索引,所述共享内存每次仅允许一个进程访问,所述日志索引每次被申请时自动递增;

获取模块,用于对于所述多个进程中的任意一个进程,若所述一个进程在运行期间产生对第二网络设备的操作日志,则从所述共享内存中获取所述一个进程对应的日志索引;

存储模块,用于根据所述一个进程对应的日志索引,将所述操作日志存储到本地日志文件。

可选地,所述本地日志文件包括一个或多个日志文件,每个日志文件包括多个日志记录,每个日志记录包含日志索引,所述每个日志记录用于存储操作日志,所述每个日志文件包含的多个日志记录中的日志索引按序增大。

可选地,所述创建模块用于:

创建共享内存,并将所述共享内存映射到所述多个进程中每个进程的地址空间;

将日志索引存储到所述共享内存中,并将所述共享内存中的日志索引初始化为0;

从所述本地日志文件中存储有操作日志的日志记录中确定日志索引最大的一个日志记录;

若所述共享内存中的日志索引小于所述一个日志记录中的日志索引,则将所述共享内存中的日志索引更新为所述一个日志记录中的日志索引。

可选地,所述每个日志记录的大小均为参考字节数,所述存储模块用于:

判断是否已打开目标日志文件,所述目标日志文件为包含有所述一个进程对应的日志索引的日志文件;

若已打开所述目标日志文件,则根据所述一个进程对应的日志索引和所述参考字节数,从所述目标日志文件中确定目标日志记录;

将所述操作日志存储到所述目标日志记录。

可选地,所述存储模块用于:

若未打开所述目标日志文件,则关闭当前打开的日志文件;

若所述本地日志文件中不存在所述目标日志文件,则创建并打开所述目标日志文件,并返回所述判断是否已打开目标日志文件的步骤;

若所述本地日志文件中存在所述目标日志文件,则打开所述目标日志文件,并返回所述判断是否已打开目标日志文件的步骤。

可选地,所述存储模块用于:

将所述一个进程对应的日志索引减去所述目标日志文件中的起始日志索引,得到索引差值;

将所述索引差值乘以所述参考字节数后得到的数值与所述目标日志文件的文件头的字节数相加,得到第一位置;

将所述目标日志文件中处于所述第一位置的后一位的位置作为第二位置;

将起始位置为所述第二位置的日志记录确定为目标日志记录。

可选地,所述存储模块用于:

生成所述操作日志的校验码;

将所述操作日志和所述操作日志的校验码均存储到所述目标日志记录。

一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器用于存放计算机程序,所述处理器用于执行所述存储器上所存放的程序,以实现上述存储日志的方法的步骤。

一方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述存储日志的方法的步骤。

一方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述存储日志的方法的步骤。

本申请提供的技术方案至少可以带来以下有益效果:

第一网络设备创建共享内存,并通过该共享内存在各个进程之间共享自增的日志索引,从而可以保证多个进程对应的日志索引不会出现重复。并且,第一网络设备可以根据每个进程对应的日志索引将每个进程产生的操作日志存储到本地日志文件,因而不仅可以保证在将操作日志存储到本地日志文件时不会出现数据重叠,且可以保证该多个进程产生的操作日志是串行线性地被存储到本地日志文件。也就是说,第一网络设备可以将对第二网络设备的操作日志有序地存储下来,使第一网络设备可以摆脱对第二网络设备侧的日志存储的依赖,继而便于第一网络设备更加灵活地对程序或数据进行回滚或恢复。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种实施环境的示意图;

图2是本申请实施例提供的一种存储日志的方法的流程图;

图3是本申请实施例提供的一种日志文件的示意图;

图4是本申请实施例提供的一种启动流程的示意图;

图5是本申请实施例提供的一种日志正式存储流程的示意图;

图6是本申请实施例提供的一种存储日志的方法的构思图;

图7是本申请实施例提供的一种存储日志的装置的结构示意图;

图8是本申请实施例提供的一种第一网络设备的结构示意图;

图9是本申请实施例提供的另一种第一网络设备的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

在对本申请实施例提供的存储日志的方法进行详细地解释说明之前,先对本申请实施例涉及的实施环境进行介绍。

图1是本申请实施例提供的一种实施环境的示意图。如图1所示,该实施环境包括:第一网络设备101和第二网络设备102。第一网络设备101与第二网络设备102可以通过有线连接或无线连接进行通信。

第一网络设备101上可以运行有多个进程。第一网络设备101可以是安装有多个客户端的网络设备,每个客户端可以运行各自的进程。也即,第一网络设备101上运行的多个进程均可以是客户端进程。

第一网络设备101上的每个进程在运行期间均可能产生对第二网络设备102的操作日志。第二网络设备102可以是安装有服务端且具有数据库的网络设备。如果第一网络设备101上的进程在运行期间访问了第二网络设备102上的数据库,则第一网络设备101会产生操作日志,该操作日志用于记录该进程对该数据库的所有操作(如数据更新、数据删除等)。

其中,第一网络设备101可以是能够与用户通过键盘、触摸屏、遥控器、语音交互等一种或多种方式进行人机交互的终端,如可以是pc(personalcomputer,个人计算机)、智能手机、pda(personaldigitalassistant,个人数字助手)、可穿戴设备、平板电脑、智能车机、智能电视、智能音箱等。或者,第一网络设备101可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者可以是一个云计算服务中心。

第二网络设备102可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者可以是一个云计算服务中心。

接下来对本申请实施例提供的存储日志的方法进行详细的解释说明。

图2是本申请实施例提供的一种存储日志的方法的流程图,该方法应用于图1所示的实施环境中。如图2所示,该方法包括如下步骤。

步骤201:第一网络设备创建多个进程的共享内存。

第一网络设备上可以运行有多个进程。第一网络设备可以是安装有多个客户端的网络设备,每个客户端可以运行各自的进程。也即,第一网络设备上运行的多个进程均可以是客户端进程。

第一网络设备上的每个进程在运行期间均可能产生对第二网络设备的操作日志。第二网络设备可以是安装有服务端且具有数据库的网络设备。比如,如果第一网络设备上的客户端进程在运行期间访问了第二网络设备上的服务端的数据库,则第一网络设备会产生操作日志,该操作日志用于记录客户端进程对服务端的数据库的所有操作(如数据更新、数据删除等)。

该共享内存是该多个进程所共享的一段物理内存。该多个进程均可以访问该共享内存,即该多个进程均可以向该共享内存中写入数据或从该共享内存中读取数据。该共享内存每次仅允许一个进程访问。也即,当有一个进程正在访问该共享内存时,其他进程将不能访问该共享内存。

该共享内存中存储有日志索引。该日志索引每次被申请时自动递增。也即,当有进程申请该共享内存中的日志索引时,该共享内存中的日志索引会自动加1。换句话说,当有进程从该共享内存中申请日志索引时,是将该共享内存中的日志索引加1后再返回给该进程。如此,可以保证各个进程申请到的日志索引是顺序增加的。

具体地,步骤201的操作可以为:第一网络设备创建共享内存,并将该共享内存映射到该多个进程中每个进程的地址空间;将日志索引存储到该共享内存中,并将该共享内存中的日志索引初始化为0;从本地日志文件中存储有操作日志的日志记录中确定日志索引最大的一个日志记录;若该共享内存中的日志索引小于这一个日志记录中的日志索引,则将该共享内存中的日志索引更新为这一个日志记录中的日志索引。

其中,第一网络设备创建共享内存的操作与相关技术中创建共享内存的操作类似,本申请实施例对此不进行详细阐述。比如,第一网络设备可以调用shmget函数来创建一块共享内存。

其中,第一网络设备将该共享内存映射到该多个进程中每个进程的地址空间的操作与相关技术中将某个共享内存映射到某个进程的地址空间的操作类似,本申请实施例对此不进行详细阐述。比如,第一网络设备可以调用shmat函数来将该共享内存映射到该多个进程中每个进程的地址空间,也即,将该多个进程中每个进程的地址空间的虚拟地址映射到该共享内存的物理地址。

在第一网络设备创建并映射该共享内存到该多个进程中每个进程的地址空间后,该多个进程中的每个进程均可以访问该共享内存。之后,第一网络设备可以将该共享内存中的日志索引先初始化为0,再基于本地日志文件中已存储的操作日志的日志索引来更新该共享内存中的日志索引。

本地日志文件可以包括一个或多个日志文件。每个日志文件包括多个日志记录,每个日志记录包含日志索引。该一个或多个日志文件中的日志索引按序增大,且每个日志文件包含的多个日志记录中的日志索引按序增大。也就是说,本地日志文件中的所有日志索引均是按序增大的,后一个日志索引会比前一个日志索引大1。

每个日志文件中的每个日志记录均用于存储操作日志。也就是说,在新创建一个日志文件后,这个日志文件中包括多个日志记录。每个日志记录中已存储有日志索引,且还具有用于存储操作日志的存储空间。

进一步地,每个日志文件中不仅可以包括日志记录,还可以包括文件头。并且,每个日志记录中不仅可以包含用于存储日志索引和操作日志的存储空间,还可以包含用于存储其他数据内容的存储空间,如还可以包含用于存储操作日志的校验码的存储空间。

本地日志文件中每个日志记录的字节数可以相同,且均可以为参考字节数。每个日志记录中用于存储同一类型的数据内容的存储空间的字节数可以相同。比如,每个日志记录中用于存储日志索引的存储空间的字节数可以相同,每个日志记录中用于存储操作日志的存储空间的字节数也可以相同。这种情况下,该多个进程中的每个进程产生的操作日志的字节数可以相同。

一种可能的情况中,如图3所示,一个日志文件中可以包括日志数据区和文件头。日志数据区可以包括多个日志记录。每个日志记录中可以包含用于存储日志索引、操作日志大小、操作日志和操作文件的校验码的存储空间。文件头中可以包括这个日志文件中的起始日志索引(即日志数据区中的第一个日志记录包含的日志索引)、日志记录个数、日志文件大小、保留和起始日志索引的校验码。假设,一个日志文件的文件头的字节数为256字节,这个日志文件的日志数据区包括n个日志记录,每个日志记录的字节数均是4096字节,则这个日志文件大小为n*4096+256字节。

可选地,日志文件的命名可以包含日志文件中的起始日志索引和结束日志索引(即日志数据区中的最后一个日志记录包含的日志索引)。比如,日志文件的命名规则可以为“起始日志索引~结束日志索引”。如此,第一网络设备可以根据日志文件的命名快速实现对日志文件的排序,而不用特意打开日志文件来读取数据内容。

对于本地日志文件中已存储有操作日志的日志记录中日志索引最大的这一个日志记录,比这一个日志记录中的日志索引小的日志索引均已被申请使用,这一个日志记录中的日志索引是最新申请使用的日志索引。因而当该共享内存中的日志索引小于这一个日志记录中的日志索引时,需要将该共享内存中的日志索引更新为这一个日志记录中的日志索引,以避免日志索引被重复申请使用。

值得注意的是,步骤201是日志正式存储前的启动流程。为了便于理解,下面结合图4来对此启动流程进行举例说明,此启动流程由第一网络设备执行。如图4所示,此启动流程包括如下步骤401-步骤409。

在步骤401中,创建共享内存并映射到各个进程的地址空间。

在步骤402中,判断共享内存中的日志索引是否已初始化为0;若共享内存中的日志索引未初始化为0,则执行步骤403;若共享内存中的日志索引已初始化为0,则执行步骤404。

在步骤403中,将共享内存中的日志索引初始化为0,执行步骤404。

在步骤404中,判断日志存储目录是否存在,日志存储目录用于存储本地日志文件;若日志存储目录不存在,则执行步骤405;若日志存储目录已存在,则执行步骤406。

在步骤405中,创建日志存储目录,执行步骤406。

在步骤406中,扫描日志存储目录下的所有日志文件,根据日志文件的命名确定包含有最大日志索引的一个日志文件。

在步骤407中,从这个日志文件中存储有操作日志的日志记录中确定日志索引最大的一个日志记录。

在步骤408中,判断共享内存中的日志索引是否小于这个日志记录中的日志索引;若共享内存中的日志索引小于这个日志记录中的日志索引,则执行步骤409;若共享内存中的日志索引大于或等于这个日志记录中的日志索引,则结束操作。

在步骤409中,将共享内存中的日志索引更新为这个日志记录中的日志索引,结束操作。

步骤202:对于该多个进程中的任意一个进程,若这一个进程在运行期间产生对第二网络设备的操作日志,则第一网络设备从该共享内存中获取这一个进程对应的日志索引。

若这一个进程在运行期间产生对第二网络设备的操作日志,第一网络设备后续会将该操作日志存储到本地日志文件。在存储操作日志之前,第一网络设备要先从该共享内存中申请一个日志索引,并根据这个日志索引将该操作日志存储到本地日志文件。

第一网络设备从该共享内存中获取这一个进程对应的日志索引的过程,即是这一个进程从该共享内存中申请一个日志索引的过程。一方面,这一个进程从该共享内存中申请一个日志索引时,其他进程不能对该共享内存进行访问,从而可以保证该共享内存中的日志索引的准确性。另一方面,这一个进程从该共享内存中申请一个日志索引时,该共享内存中的日志索引会自动加1并返回给这一个进程,从而可以保证从该共享内存中获取到的日志索引是顺序增加的。

比如,该共享内存中的日志索引是6。当第一网络设备上的进程1在运行期间产生对第二网络设备的操作日志时,进程1可以访问该共享内存,从该共享内存中申请日志索引。在进程1从该共享内存中申请日志索引时,该共享内存中的日志索引会加1,此时该共享内存中的日志索引是7,该共享内存中的日志索引会返回给进程1。如此,进程1从该共享内存中申请到的日志索引就是7。

步骤203:第一网络设备根据这一个进程对应的日志索引,将该操作日志存储到本地日志文件。

本申请实施例中可以通过该共享内存在各个进程之间共享自增的日志索引,从而可以保证多个进程对应的日志索引不会出现重复。并且,由于第一网络设备是根据每个进程对应的日志索引将每个进程产生的操作日志存储到本地日志文件,所以不仅可以保证在将操作日志存储到本地日志文件时不会出现数据重叠,且可以保证该多个进程产生的操作日志是串行线性地被存储到本地日志文件。

也即,本申请实施例可以将各个进程的操作日志串行线性化,让第一网络设备对第二网络设备的操作日志能有序地存储下来,同时保证各个进程之间不会相互干扰,保证了日志存储的高性能。此外,本申请实施例中由第一网络设备来存储第一网络设备对第二网络设备的操作日志,使第一网络设备摆脱了对第二网络设备侧的日志存储的依赖,继而便于第一网络设备更加灵活地对程序或数据进行回滚或恢复。

具体地,步骤203的操作可以为:第一网络设备判断是否已打开目标日志文件,目标日志文件为包含有这一个进程对应的日志索引的日志文件。若已打开目标日志文件,则第一网络设备根据这一个进程对应的日志索引和参考字节数,从目标日志文件中确定目标日志记录;将该操作日志存储到目标日志记录。若未打开目标日志文件,则第一网络设备关闭当前打开的日志文件;若本地日志文件中不存在目标日志文件,则创建并打开目标日志文件,并返回判断是否已打开目标日志文件的步骤;若本地日志文件中存在目标日志文件,则打开目标日志文件,并返回判断是否已打开目标日志文件的步骤。

第一网络设备在确定这一个进程对应的日志索引后,需要将该操作日志存储到包含有这个日志索引的日志文件中,即存储到目标日志文件中。而将该操作日志存储到目标日志文件之前,需要先打开目标日志文件。若目标日志文件已打开,则可以直接存储该操作日志;若目标日志文件存在但未打开,则需要关闭当前打开的日志文件并打开目标日志文件后再存储该操作日志;若目标日志文件不存在,则需要先创建目标日志文件并打开后再存储该操作日志。

其中,第一网络设备根据这一个进程对应的日志索引和参考字节数,从目标日志文件中确定目标日志记录的操作可以通过两种方式实现。

一种方式中,第一网络设备可以读取目标日志文件中每条日志记录中包含的日志索引,然后将包含的日志索引与这一个进程对应的日志索引相同的日志记录作为目标日志记录。

另一种方式中,第一网络设备可以将这一个进程对应的日志索引减去目标日志文件中的起始日志索引,得到索引差值;将该索引差值乘以参考字节数后得到的数值与目标日志文件的文件头的字节数相加,得到第一位置;将目标日志文件中处于第一位置的后一位的位置作为第二位置;将起始位置为第二位置的日志记录确定为目标日志记录。

这种情况下,第一网络设备仅需从目标日志文件的文件头中读取起始日志索引,而无需读取目标日志文件中的每条日志记录,从而可以节省处理资源,提高存储效率。

此外,第一网络设备在从目标日志文件的文件头中读取起始日志索引时,还可以通过目标日志文件的文件头中的校验码来校验所读取的起始日志索引是否正确。

由于每个日志记录的字节数均为参考字节数,因而可以根据目标日志文件中的起始日志索引与这一个进程对应的日志索引之间的索引差值和参考字节数,来确定该操作日志在目标日志文件中对应的存储位置,在此存储位置处的日志记录就是用于存储该操作日志的目标日志记录。

其中,第一网络设备将该操作日志存储到目标日志记录的操作可以为:第一网络设备生成该操作日志的校验码;将该操作日志和该操作日志的校验码均存储到目标日志记录。

如此,在后续从目标日志记录中读取该操作日志时,可以先使用目标日志记录中的检验码来检验该操作日志是否正确,在该操作日志正确时再进行读取,从而可以保证数据安全性。

该操作日志的校验码可以是基于该操作日志本身生成,上述起始日志索引的校验码也可以是基于该起始日志索引本身生成。该操作日志的校验码以及起始日志索引的校验码均可以是crc(cyclicredundancycheck,循环冗余校验)码。当然,也可以是其他校验码,本申请实施例对此不作限定。

值得注意的是,步骤202和步骤203是日志正式存储流程。为了便于理解,下面结合图5来对此日志正式存储流程进行举例说明。此日志正式存储流程由第一网络设备执行。如图5所示,当第一网络设备上的一个进程在运行期间产生了对第二网络设备的操作日志时,此日志正式存储流程包括如下步骤501-步骤508。

在步骤501中,获取该共享内存中的日志索引作为这一个进程对应的日志索引,对该日志索引的获取会触发日志索引自动加1。

在步骤502中,根据日志文件的命名确定本地日志文件中包含有这一个进程对应的日志索引的目标日志文件。

在步骤503中,判断是否已打开目标日志文件;若已打开目标日志文件,则执行步骤508;若未打开目标日志文件,则执行步骤504-步骤508。

在步骤504中,关闭当前打开的日志文件,具体可以是关闭当前打开的日志文件联结的文件句柄。

在步骤505中,判断本地日志文件中是否存在目标日志文件;若本地日志文件中不存在目标日志文件,则执行步骤506;若本地日志文件中存在目标日志文件,则执行步骤507。

在步骤506中,创建并打开目标日志文件,执行步骤508。

在步骤507中,打开目标日志文件,执行步骤508。

在步骤508中,根据这一个进程对应的日志索引和参考字节数,从目标日志文件中确定目标日志记录;将该操作日志存储到目标日志记录。

下面结合图6来对本申请实施例提供的存储日志的方法的构思进行说明。参见图6,第一网络设备上运行有多个进程(如图6中所示的进程1、进程2和进程3)。本申请实施例中在第一网络设备上创建共享内存用来存放日志索引。多个进程在运行期间如果产生对第二网络设备的操作日志,则可以从共享内存中申请日志索引,并根据日志索引将操作日志存储到本地日志文件中。

一方面,多个进程之间通过共享内存来分配用于实现操作日志存储的日志索引。多个进程中的每个进程每次存储操作日志的时候从共享内存中申请一个日志索引,日志索引每次被申请时就自动加1。这样可以保证多个进程使用的日志索引都是顺序增加,继而可以保证操作日志是串行线性地被存储。

另一方面,多个进程间共用相同的本地日志文件。本地日志文件中每条日志记录的大小固定,日志索引一旦分配出来操作日志在本地日志文件中的存储位置就固定。多个进程各自可以根据操作日志的存储位置向相同的日志文件中写入操作日志,保证相互之间不会出现数据重叠。

在本申请实施例中,第一网络设备创建共享内存,并通过该共享内存在各个进程之间共享自增的日志索引,从而可以保证多个进程对应的日志索引不会出现重复。并且,第一网络设备可以根据每个进程对应的日志索引将每个进程产生的操作日志存储到本地日志文件,因而不仅可以保证在将操作日志存储到本地日志文件时不会出现数据重叠,且可以保证该多个进程产生的操作日志是串行线性地被存储到本地日志文件。也就是说,第一网络设备可以将对第二网络设备的操作日志有序地存储下来,使第一网络设备可以摆脱对第二网络设备侧的日志存储的依赖,继而便于第一网络设备更加灵活地对程序或数据进行回滚或恢复。

图7是本申请实施例提供的一种存储日志的装置的结构示意图。该装置应用于运行有多个进程的第一网络设备。参见图7,该装置包括:

创建模块701,用于创建多个进程的共享内存,共享内存中存储有日志索引,共享内存每次仅允许一个进程访问,日志索引每次被申请时自动递增;

获取模块702,用于对于多个进程中的任意一个进程,若一个进程在运行期间产生对第二网络设备的操作日志,则从共享内存中获取一个进程对应的日志索引;

存储模块703,用于根据一个进程对应的日志索引,将操作日志存储到本地日志文件。

可选地,本地日志文件包括一个或多个日志文件,每个日志文件包括多个日志记录,每个日志记录包含日志索引,每个日志记录用于存储操作日志,每个日志文件包含的多个日志记录中的日志索引按序增大。

可选地,创建模块701用于:

创建共享内存,并将共享内存映射到多个进程中每个进程的地址空间;

将日志索引存储到共享内存中,并将共享内存中的日志索引初始化为0;

从本地日志文件中存储有操作日志的日志记录中确定日志索引最大的一个日志记录;

若共享内存中的日志索引小于一个日志记录中的日志索引,则将共享内存中的日志索引更新为一个日志记录中的日志索引。

可选地,每个日志记录的大小均为参考字节数,存储模块703用于:

判断是否已打开目标日志文件,目标日志文件为包含有一个进程对应的日志索引的日志文件;

若已打开目标日志文件,则根据一个进程对应的日志索引和参考字节数,从目标日志文件中确定目标日志记录;

将操作日志存储到目标日志记录。

可选地,存储模块703用于:

若未打开目标日志文件,则关闭当前打开的日志文件;

若本地日志文件中不存在目标日志文件,则创建并打开目标日志文件,并返回判断是否已打开目标日志文件的步骤;

若本地日志文件中存在目标日志文件,则打开目标日志文件,并返回判断是否已打开目标日志文件的步骤。

可选地,存储模块703用于:

将一个进程对应的日志索引减去目标日志文件中的起始日志索引,得到索引差值;

将索引差值乘以参考字节数后得到的数值与目标日志文件的文件头的字节数相加,得到第一位置;

将目标日志文件中处于第一位置的后一位的位置作为第二位置;

将起始位置为第二位置的日志记录确定为目标日志记录。

可选地,存储模块703用于:

生成操作日志的校验码;

将操作日志和操作日志的校验码均存储到目标日志记录。

在本申请实施例中,第一网络设备创建共享内存,并通过该共享内存在各个进程之间共享自增的日志索引,从而可以保证多个进程对应的日志索引不会出现重复。并且,第一网络设备可以根据每个进程对应的日志索引将每个进程产生的操作日志存储到本地日志文件,因而不仅可以保证在将操作日志存储到本地日志文件时不会出现数据重叠,且可以保证该多个进程产生的操作日志是串行线性地被存储到本地日志文件。也就是说,第一网络设备可以将对第二网络设备的操作日志有序地存储下来,使第一网络设备可以摆脱对第二网络设备侧的日志存储的依赖,继而便于第一网络设备更加灵活地对程序或数据进行回滚或恢复。

需要说明的是:上述实施例提供的存储日志的装置在存储日志时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的存储日志的装置与存储日志的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

上述第一网络设备可以是计算机设备,该计算机设备可以终端或服务器。下面分别对这两种情况进行说明。

图8是本申请实施例提供的一种第一网络设备的结构示意图。第一网络设备可以是终端800,终端800可以是:智能手机、平板电脑、mp3播放器(movingpictureexpertsgroupaudiolayeriii,动态影像专家压缩标准音频层面3)、mp4(movingpictureexpertsgroupaudiolayeriv,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端800还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。

通常,终端800包括有:处理器801和存储器802。

处理器801可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器801可以采用dsp(digitalsignalprocessing,数字信号处理)、fpga(field-programmablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器801也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(centralprocessingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器801可以集成有gpu(graphicsprocessingunit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器801还可以包括ai(artificialintelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。

存储器802可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器802还可包括高速随机存取存储器以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器802中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器801所执行以实现本申请中方法实施例提供的存储日志的方法中执行的操作。

在一些实施例中,终端800还可选包括有:外围设备接口803和至少一个外围设备。处理器801、存储器802和外围设备接口803之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口803相连。具体地,外围设备包括:射频电路804、触摸显示屏805、摄像头806、音频电路807、定位组件808和电源809中的至少一种。

外围设备接口803可被用于将i/o(input/output,输入/输出)相关的至少一个外围设备连接到处理器801和存储器802。在一些实施例中,处理器801、存储器802和外围设备接口803被集成在同一芯片或电路板上;在一些其他实施例中,处理器801、存储器802和外围设备接口803中的任意一个或两个可以在单独的芯片或电路板上实现,本申请对此不加以限定。

射频电路804用于接收和发射rf(radiofrequency,射频)信号,也称电磁信号。射频电路804通过电磁信号与通信网络以及其他通信设备进行通信。射频电路804将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路804包括:天线系统、rf收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等。射频电路804可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2g、3g、4g及5g)、无线局域网和/或wifi(wirelessfidelity,无线保真)网络。在一些实施例中,射频电路804还可以包括nfc(nearfieldcommunication,近距离无线通信)有关的电路,本申请对此不加以限定。

显示屏805用于显示ui(userinterface,用户界面)。该ui可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏805是触摸显示屏时,显示屏805还具有采集在显示屏805的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器801进行处理。此时,显示屏805还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏805可以为一个,设置在终端800的前面板;在另一些实施例中,显示屏805可以为至少两个,分别设置在终端800的不同表面或呈折叠设计;在再一些实施例中,显示屏805可以是柔性显示屏,设置在终端800的弯曲表面上或折叠面上。甚至,显示屏805还可以设置成非矩形的不规则图形,也即异形屏。显示屏805可以采用lcd(liquidcrystaldisplay,液晶显示屏)、oled(organiclight-emittingdiode,有机发光二极管)等材质制备。

摄像头组件806用于采集图像或视频。可选地,摄像头组件806包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及vr(virtualreality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件806还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。

音频电路807可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器801进行处理,或者输入至射频电路804以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在终端800的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器801或射频电路804的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路807还可以包括耳机插孔。

定位组件808用于定位终端800的当前地理位置,以实现导航或lbs(locationbasedservice,基于位置的服务)。定位组件808可以是基于美国的gps(globalpositioningsystem,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。

电源809用于为终端800中的各个组件进行供电。电源809可以是交流电、直流电、一次性电池或可充电电池。当电源809包括可充电电池时,该可充电电池可以支持有线充电或无线充电。该可充电电池还可以用于支持快充技术。

在一些实施例中,终端800还包括有一个或多个传感器810。该一个或多个传感器810包括但不限于:加速度传感器811、陀螺仪传感器812、压力传感器813、指纹传感器814、光学传感器815以及接近传感器816。

加速度传感器811可以检测以终端800建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器811可以用于检测重力加速度在三个坐标轴上的分量。处理器801可以根据加速度传感器811采集的重力加速度信号,控制触摸显示屏805以横向视图或纵向视图进行用户界面的显示。加速度传感器811还可以用于游戏或用户的运动数据的采集。

陀螺仪传感器812可以检测终端800的机体方向及转动角度,陀螺仪传感器812可以与加速度传感器811协同采集用户对终端800的3d动作。处理器801根据陀螺仪传感器812采集的数据,可以实现如下功能:动作感应(比如根据用户的倾斜操作来改变ui)、拍摄时的图像稳定、游戏控制以及惯性导航。

压力传感器813可以设置在终端800的侧边框和/或触摸显示屏805的下层。当压力传感器813设置在终端800的侧边框时,可以检测用户对终端800的握持信号,由处理器801根据压力传感器813采集的握持信号进行左右手识别或快捷操作。当压力传感器813设置在触摸显示屏805的下层时,由处理器801根据用户对触摸显示屏805的压力操作,实现对ui界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。

指纹传感器814用于采集用户的指纹,由处理器801根据指纹传感器814采集到的指纹识别用户的身份,或者,由指纹传感器814根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器801授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。指纹传感器814可以被设置在终端800的正面、背面或侧面。当终端800上设置有物理按键或厂商logo时,指纹传感器814可以与物理按键或厂商logo集成在一起。

光学传感器815用于采集环境光强度。在一个实施例中,处理器801可以根据光学传感器815采集的环境光强度,控制触摸显示屏805的显示亮度。具体地,当环境光强度较高时,调高触摸显示屏805的显示亮度;当环境光强度较低时,调低触摸显示屏805的显示亮度。在另一个实施例中,处理器801还可以根据光学传感器815采集的环境光强度,动态调整摄像头组件806的拍摄参数。

接近传感器816也称距离传感器,通常设置在终端800的前面板。接近传感器816用于采集用户与终端800的正面之间的距离。在一个实施例中,当接近传感器816检测到用户与终端800的正面之间的距离逐渐变小时,由处理器801控制触摸显示屏805从亮屏状态切换为息屏状态;当接近传感器816检测到用户与终端800的正面之间的距离逐渐变大时,由处理器801控制触摸显示屏805从息屏状态切换为亮屏状态。

本领域技术人员可以理解,图8中示出的结构并不构成对终端800的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。

图9是本申请实施例提供的一种第一网络设备的结构示意图。第一网络设备可以是服务器900,服务器900可以是后台服务器集群中的服务器。具体来讲:

服务器900包括cpu(centralprocessingunit,中央处理单元)901、包括ram(randomaccessmemory,随机存取存储器)902和rom(read-onlymemory,只读存储器)903的系统存储器904,以及连接系统存储器904和中央处理单元901的系统总线905。服务器900还包括帮助计算机内的各个器件之间传输信息的基本i/o(input/output,输入/输出)系统906,和用于存储操作系统913、应用程序914和其他程序模块915的大容量存储设备907。

基本输入/输出系统906包括有用于显示信息的显示器908和用于用户输入信息的诸如鼠标、键盘之类的输入设备909。其中显示器908和输入设备909都通过连接到系统总线905的输入/输出控制器910连接到中央处理单元901。基本输入/输出系统906还可以包括输入/输出控制器910以用于接收和处理来自键盘、鼠标或电子触控笔等多个其他设备的输入。类似地,输入/输出控制器910还提供输出到显示屏、打印机或其他类型的输出设备。

大容量存储设备907通过连接到系统总线905的大容量存储控制器(未示出)连接到中央处理单元901。大容量存储设备907及其相关联的计算机可读介质为服务器900提供非易失性存储。也就是说,大容量存储设备907可以包括诸如硬盘或cd-rom(compactdiscread-onlymemory,只读光盘)驱动器之类的计算机可读介质(未示出)。

不失一般性,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括ram、rom、eprom(electricallyerasableprogrammableread-onlymemory,可擦可编程只读存储器)、eeprom(electricallyerasableprogrammableread-onlymemory,电可擦可编程只读存储器)、闪存或其他固态存储其技术,以及包括cd-rom、dvd(digitalversatiledisc,数字通用光盘)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。系统存储器904和大容量存储设备907可以统称为存储器。

根据本申请的各种实施例,服务器900还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器900可以通过连接在系统总线905上的网络接口单元911连接到网络912,或者说,也可以使用网络接口单元911来连接到其他类型的网络或远程计算机系统(未示出)。

上述存储器还包括一个或者一个以上的程序,一个或者一个以上程序存储于存储器中,被配置由cpu执行。该一个或者一个以上程序包含用于进行本申请中方法实施例提供的存储日志的方法中执行的操作的指令。

在一些实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,该计算机程序被处理器执行时实现上述图2实施例提供的存储日志的方法的步骤。比如,该计算机可读存储介质可以是rom、ram、cd-rom、磁带、软盘和光数据存储设备等。

值得注意的是,本申请实施例提到的计算机可读存储介质可以为非易失性存储介质,换句话说,可以是非瞬时性存储介质。

应当理解的是,实现上述实施例的全部或部分步骤可以通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。该计算机指令可以存储在上述计算机可读存储介质中。

在一些实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述图2实施例提供的存储日志的方法的步骤。

以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

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