一种程序日志处理方法、装置、存储介质及设备与流程

文档序号:32756771发布日期:2022-12-31 04:15阅读:30来源:国知局
一种程序日志处理方法、装置、存储介质及设备与流程

1.本技术涉及日志数据处理技术领域,具体而言,涉及一种程序日志处理方法、装置、存储介质及设备。


背景技术:

2.应用程序的日志查询是排查应用程序问题的重要手段。大多数场景中,实时的日志查询是常见的需求,有助于用户快速定位程序的问题。
3.相关技术中一般通过日志收集模块将应用程序的日志上传到日志管理系统,进而在日志管理系统中查询日志。由于收集上传频率过于频繁的话会影响服务性能,因此,在实际实现过程中,收集上传频率一般设置较低。然而,这就导致该过程中存在一定的延时,无法实现实时的日志查询。


技术实现要素:

4.本技术实施例的目的在于提供一种程序日志处理方法、装置、存储介质及设备,旨在解决针对应用程序的日志查询的方案存在的过程有延时,无法实现实时的日志查询的问题。
5.第一方面,本技术实施例提供的一种程序日志处理方法,应用于服务器,包括:
6.监听服务程序产生的日志消息;
7.对所述日志消息进行格式化处理,并将处理后的日志消息推送到目标消息队列中;
8.读取所述目标消息队列中的消息,并将所述消息推送到websocket管道中,以使前端页面在建立与所述服务器之间的websocket连接后,从所述websocket管道中接收所述消息并展示。
9.在上述实现过程中,服务器监听服务程序产生的日志消息,在产生日志时,对日志消息进行格式化处理,并推送到目标消息队列中,进而将从该目标消息队列中读取出的消息推送到websocket管道中,以使前端页面建立websocket连接后,将接收到的消息进行展示。如此,通过websocket方式,将应用程序日志流式传输到websocket管道中,使得前端页面通过与后端接口建立的websocket连接,实现实时日志的输出展示,更好地辅助排查和定位问题;同时,由于无需频繁地请求服务器,在一定程度上也减轻了服务器的压力。
10.进一步地,在一些实施例中,所述目标消息队列是环形消息队列。
11.在上述实现过程中,通过设置环形消息队列的方式,有效减少因为消息消费不及时导致消息积压,从而引发的系统崩溃问题。
12.进一步地,在一些实施例中,所述对所述日志消息进行格式化处理,包括:
13.解析所述日志消息的以下至少一种内容:日志时间、日志名称、日志级别、日志内容。
14.在上述实现过程中,在产生日志时,解析日志消息,格式化日志时间、名称、级别、
内容这几种有用信息后,再推送到目标消息队列中,方便后续的日志查看以及程序问题排查。
15.进一步地,在一些实施例中,所述读取所述目标消息队列中的消息,包括:
16.通过日志事件处理器监听所述目标消息队列;
17.当监听到所述目标消息队列中有新的消息时,读取所述消息。
18.在上述实现过程中,通过日志事件处理器监听消息队列中的消息,保障消息推送的及时性。
19.进一步地,在一些实施例中,所述将所述消息推送到websocket管道中,包括:
20.通过简单消息模板中的convertandsend函数将所述消息推送到websocket管道中。
21.在上述实现过程中,使用convertandsen这一方式推送消息,有效减少因为消费者处理慢而阻塞线程的情况。
22.进一步地,在一些实施例中,所述前端页面包括用于展示接收到的消息的日志控件,所述消息包括日志内容;所述前端页面根据所述日志内容的大小,设置所述日志控件的滚动高度。
23.在上述实现过程中,根据输出的日志内容大小设置控件滚动高度,以确保控件滚动条位置为最底端,这样可以使得最新的日志能在日志控件中正常展示。
24.进一步地,在一些实施例中,所述消息还包括日志级别;所述前端页面根据所述日志级别,设置所述日志控件的输出样式,不同日志级别对应不同的输出样式,所述输出样式包括颜色和/或字体。
25.在上述实现过程中,通过不同的输出样式显示不同日志级别的消息,更好地辅助技术人员对应用程序问题的排查定位。
26.第二方面,本技术实施例提供的一种程序日志处理装置,应用于服务器,包括:
27.监听模块,用于监听服务程序产生的日志消息;
28.存放模块,用于对所述日志消息进行格式化处理,并将处理后的日志消息推送到目标消息队列中;
29.推送模块,用于读取所述目标消息队列中的消息,并将所述消息推送到websocket管道中,以使前端页面在建立与所述服务器之间的websocket连接后,从所述websocket管道中接收所述消息并展示。
30.第三方面,本技术实施例提供的一种电子设备,包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面任一项所述的方法的步骤。
31.第四方面,本技术实施例提供的一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,当所述指令在计算机上运行时,使得所述计算机执行如第一方面任一项所述的方法。
32.第五方面,本技术实施例提供的一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得计算机执行如第一方面任一项所述的方法。
33.本技术公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本技术公开的上述技术即可得知。
34.为使本技术的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
35.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
36.图1为本技术实施例提供的一种程序日志处理方法的流程图;
37.图2为本技术实施例提供的一种程序日志处理系统的示意图;
38.图3为本技术实施例提供的一种程序日志处理装置的框图;
39.图4为本技术实施例提供的一种电子设备的结构框图。
具体实施方式
40.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。
41.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本技术的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
42.如背景技术记载,相关技术针对应用程序的日志查询的方案存在着过程有延时,无法实现实时的日志查询的问题。基于此,本技术实施例提供一种程序日志处理方案,以解决上述问题。
43.接下来对本技术实施例进行介绍:
44.如图1所示,图1是本技术实施例提供的一种程序日志处理方法的流程图,所述方法可以应用于服务器,其中,该服务器可以是应用服务器。应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序,web应用程序驻留在应用服务器上,应用服务器为web应用程序提供一种简单的和可管理的对系统资源的访问机制。
45.所述方法包括:
46.在步骤101、监听服务程序产生的日志消息;
47.本步骤中提到的服务程序是部署在服务器上的应用程序,在本实施例中,该服务程序是需要排查应用性能问题的应用程序。该服务程序的业务功能可以根据不同场景的需求而有所不同,例如,在电商场景中,该服务程序可以提供查询电商产品的库存、定价等信息的服务;在导航场景中,该服务程序可以提供基于实时定位数据输出地图的服务。
48.服务程序在运作时会产生日志消息,该日志消息记载着日期、时间、使用者及动作等相关操作的描述。这些日志消息能够帮助技术人员在程序出现故障时快速进行定位,并找出其中的原因。为了实现实时的日志查询,在本实施例中,对服务程序产生的日志消息进行监听。在一些实施例中,本步骤可以是通过日志监听器实现的。该日志监听器可以认为是驻留在服务程序所在服务器上的独立进程,用于监听服务程序日志文件。
49.在步骤102、对所述日志消息进行格式化处理,并将处理后的日志消息推送到目标消息队列中;
50.由于服务程序产生的日志消息是各种信息糅杂在一起的,其中还涉及较多的无用信息,因此,服务器在输出日志消息时,需要先对日志消息进行格式化处理,使得最终输出的信息显示更加美观,同时也减轻技术人员排查问题的压力。
51.在一些实施例中,本步骤中提到的对日志消息进行格式化处理可以包括:解析日志消息的以下至少一种内容:日志时间、日志名称、日志级别、日志内容。其中,该日志时间是该日志消息的产生时间;该日志名称是创建日志时设置的名称;该日志级别是基于该日志消息的重要性或严重程度分配的,在一些场景中,该日志级别包括正常、告警、故障、错误、严重错误等;该日志内容记载的是该日志消息对应的事件内容,例如,服务程序接收某个用户查询某个产品的定价信息的请求,该用户的账号信息、该产品的定价信息以及这一事件的发展情况等都属于对应的日志消息的日志内容。这几种内容属于日志查询时的有用信息,因此,在产生日志时,解析日志消息,格式化日志时间、名称、级别、内容后,再推送到目标消息队列中,方便后续的日志查看以及程序问题排查。
52.具体地,在对日志消息进行格式化处理时,可以是采用解析表达式对日志消息进行逐行解析。例如,在日志消息中,日志时间大多是显示为时间戳的格式,服务器可以通过用于解析日志时间的正则表达式,对日志消息进行逐行解析,解析出时间戳,并将其统一格式化成指定时间格式,如“年-月-日-时-分-秒”的格式。当然,在其他实施例中,也可以采用其他方式对日志消息进行格式化处理,本技术对此不作限制。
53.另外,考虑到日志消息中存在较多的无用信息,若对这些无用信息进行输出展示,无疑会浪费较多资源,因此,在一些实施例中,在对日志消息进行格式化处理之前,可以在logback(一个开源日志组件)的配置文件中增加filter(过滤器)标签,以根据指定条件对日志消息进行过滤。logback允许配置一个或多个过滤器来控制,不满足过滤器指定的条件的日志消息被过滤掉,例如,一个过滤器是根据日志级别进行过滤,且配置的日志级别为info(表征重要,用来反馈系统的当前状态给最终用户的),则对所有info级别的日志消息进行格式化处理后推送到目标消息队列中,而非info级别的日志消息被过滤掉。所设置的filter标签可以根据具体场景的需求进行选择,需要说明的是,当通过日志监听器将监听的日志消息推送到目标消息队列中时,该filter标签的value设置为该日志监听器的类名。
54.本步骤中提到的目标消息队列是临时存放格式化处理后的日志消息的容器。在一些实施例中,该目标消息队列可以是环形消息队列。环形消息队列是一种首尾相连的队列数据结构,遵循先进先出原则,其用一组连续地址的存储单元依次存放从队列头到队列尾的元素,通过两个指针read_pos和write_pos分别指向读取位置和写入位置,基于这两个指针的值来判断队列是否为空以及判断队列是否为满。服务器将处理后的日志消息写入环形消息队列时,可先判断该环形消息队列是否为满,若是,则需等待环形消息队列中的消息被读取才可正常写入,若否,则将日志消息写入环形消息队列。通过设置环形消息队列的方式,可以将队列空间充分重复利用,从而有效减少因为消息消费不及时导致消息积压,从而引发的系统崩溃问题。
55.在步骤103、读取所述目标消息队列中的消息,并将所述消息推送到websocket管道中,以使前端页面在建立与所述服务器之间的websocket连接后,从所述websocket管道中接收所述消息并展示。
56.本步骤中提到的前端页面是与应用服务器相对应,为技术人员提供本地服务的用
户端程序,其可以是浏览器。websocket是一种在单个tcp连接上进行全双工通信的协议,websocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在websocket api中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。不同于相关技术中基于日志管理系统或直接登陆到应用服务器来获取日志消息的方式,本实施例中,服务器通过websocket方式,将应用程序日志流式传输到websocket管道中,使得前端页面通过与后端接口建立的websocket连接,实现实时日志的输出展示。
57.在一些实施例中,本步骤中提到的读取目标消息队列中的消息可以包括:通过日志事件处理器监听目标消息队列;当监听到该目标消息队列中有新的消息时,读取该消息。也就是说,可以开发一个日志事件处理器,用来监听目标消息队列中的消息,如果有消息,就会把这些消息推送到socket管道中。如此,可以进一步保障消息推送的及时性。
58.还有,为了避免因为消费者处理慢而阻塞线程的情况,在一些实施例中,本步骤中提到的将消息推送到websocket管道中可以包括:通过简单消息模板中的convertandsend函数将消息推送到websocket管道中。这里的简单消息模板是指simplemessagetemplate这一模板引擎,其提供发送消息的多种方式,而convertandsend函数就是其中一种,使用这一函数,输出时没有顺序,不需要等待确定消费者接收到消息再发送下一条消息,而是将所有的消息都交给消费者,消费者再自行处理。也就是说,服务器可以使用convertandsend函数将读取到的消息推送到websocket管道中,这样,前端页面打开websocket连接后,即可立刻接收到后端传输过来的所有日志消息。
59.本实施例中,前端页面接收服务器传递的消息并展示。具体地,前端通过javascript脚本在浏览器中根据后端已经创建的websocket服务ip、端口和serverendpoint来建立与服务器之间的websocket连接。这里的serverendpoint是一个注解式端口,其作用主要是将目前的类定义成一个websocket服务端,注解的值将被用于监听用户连接的终端访问url地址,客户端可以通过这个url来连接到websocket服务端。前端页面打开websocket连接,如果接收到后端传输过来的websocket消息,则说明服务程序在产出相关日志,则前端页面可以将读取到的消息进行展示,实现实时日志展示。
60.在一些实施例中,该前端页面包括用于展示接收到的消息的日志控件,该消息包括日志内容;该前端页面根据该日志内容的大小,设置该日志空间的滚动高度。这里的日志控件用于展示日志数据,也就是说,前端页面可以将从websocket管道接收到的消息绑定到该日志控件上进行展示;并且,前端页面可以在该日志控件上通过自动刷新设置scrolltop属性(该属性可以获取或者设置对象的最顶部到对象在当前窗口显示的范围内的顶边的距离),根据输出的日志内容大小设置控件滚动高度,以确保控件滚动条位置为最底端,这样可以使得最新的日志能在日志控件中正常展示。另外,相应地,在技术人员查看日志时,可以通过停止刷新设置scrolltop属性,这样能让日志在前端页面停止滚动输出,方便日志查看。
61.进一步地,在一些实施例中,该消息还包括日志级别;该前端页面根据该日志级别,设置该日志空间的输出样式,不同日志级别对应不同的输出样式,该输出样式包括颜色和/或字体。也就是说,前端页面可以根据日志的不同级别设置不同的颜色字体输出,例如,针对告警级别的日志,设置蓝色字体输出,而针对严重错误级别的日志,设置红色字体输
出。如此,更好地辅助技术人员对应用程序问题的排查定位。另外,在其他一些实施例中,该前端页面还可以设置文本日志全局搜索功能,即根据用户输入的关键字搜索相应的日志消息并展示,这样,更有效地方便日志排查。
62.本技术实施例,服务器监听服务程序产生的日志消息,在产生日志时,对日志消息进行格式化处理,并推送到目标消息队列中,进而将从该目标消息队列中读取出的消息推送到websocket管道中,以使前端页面建立websocket连接后,将接收到的消息进行展示。如此,通过websocket方式,将应用程序日志流式传输到websocket管道中,使得前端页面通过与后端接口建立的websocket连接,实现实时日志的输出展示,更好地辅助排查和定位问题;同时,由于无需频繁地请求服务器,在一定程度上也减轻了服务器的压力。
63.为了对本技术的方案做更为详细的说明,接下来介绍一具体实施例:
64.实时的日志查询对应用程序的问题排查非常重要。通常情况下,日志查询主要通过两种方式实现,一种是通过将应用程序日志收集到统一的日志管理系统,然后在统一的日志管理系统中查询日志;另一种是直接登陆到应用程序部署的服务器,通过tail或者cat命令查询日志。其中,第一种方式中,如果收集上传过于频繁会影响服务性能,因此,该过程中存在一定的延时;而第二种方式需要直接登陆到服务器,但是在生产环境对服务器管理权限控制比较严格,普通的开发者无法登陆服务器,而且这一方式需要频繁请求服务器,服务器处理压力大。基于此,本实施例提供一种程序日志处理系统,实现应用程序日志的实时展示。
65.本实施例提供的程序日志处理系统的架构如图2所示,该程序日志处理系统包括服务器21和浏览器22,在这一架构中,该服务器21是后端,该浏览器22是前端。其中:
66.该服务器21上部署有服务程序211,该服务程序211是需要排查应用性能问题的应用程序;在服务器21一侧,开发日志监听器212,用于监听服务程序211产生的日志消息,并将监听到的日志消息推送到本地环形消息队列213中;该本地环形消息队列213用于临时存放日志消息,服务器21通过继承logback中的filter类,在产生日志时,解析日志相关消息,格式化日志时间、名称、级别、内容后,推送到本地环形消息队列213中,通过设置环形消息队列的方式,避免因为消息消费不及时导致的消息积压,从而引发的系统崩溃问题;开发日志事件处理器214,用于监听本地环形消息队列213中的消息,并将监听到的消息推送到websocket管道中;建立websocket服务,形成websocket服务端215,并设置serverendpoint,通过重写onopen方法定义websocket管道建立后内容输出,同时,在推送消息时,实现eventhandler类,在onevent方法中设置读取到本地环形消息队列213中的消息后,通过simplemessagetemplate中的convertandsend方法将读取到的消息推送到定义好的websocket管道中。
67.该浏览器22上设置有日志控件221,在浏览器22中根据后端已经创建的websocket服务ip、端口和serverendpoint,建立与服务器21之间的websocket连接,形成websocket客户端222;打开websocket连接,当接收到后端传输过来的websocket消息,则说明服务程序211在产生相关日志,此时websocket客户端222将读取到的日志数据绑定在日志控件221上;同时,在日志控件221上通过自动刷新设置scrolltop属性,根据输出的日志内容大小,设置控件滚动高度,确保控件滚动条位置为最底端,从而使得最新的日志能在日志控件221中正常展示;为了方便查看日志,通过停止刷新设置scrolltop属性,这样能让日志在前端
页面停止滚动输出;并且,通过前端样式设置,根据日志的不同等级设置不同的颜色字体输出,同时根据文本日志全局搜索功能,方便日志排查。
68.通过本实施例的系统,在实际应用中至少实现以下优点:第一、后端实时读取日志并传输,前端获取到数据流后实时展示,真正实现应用程序日志实时展示,更好地辅助排查和定位问题;第二、应用程序日志通过websocket连接展示在前端页面中,不需要登陆应用程序部署所在的服务器;第三、不需要频繁地请求服务器,就能实时获取日志信息,减轻服务器压力。
69.与前述方法的实施例相对应,本技术还提供程序日志处理装置及其应用的终端的实施例:
70.如图3所示,图3是本技术实施例提供的一种程序日志处理装置的框图,所述装置包括:
71.监听模块31,用于监听服务程序产生的日志消息;
72.存放模块32,用于对所述日志消息进行格式化处理,并将处理后的日志消息推送到目标消息队列中;
73.推送模块33,用于读取所述目标消息队列中的消息,并将所述消息推送到websocket管道中,以使前端页面在建立与所述服务器之间的websocket连接后,从所述websocket管道中接收所述消息并展示。
74.在一些实施例中,上述目标消息队列是环形消息队列。
75.在一些实施例中,上述存放模块32包括解析子模块,所述解析子模块用于解析所述日志消息的以下至少一种内容:日志时间、日志名称、日志级别、日志内容。
76.在一些实施例中,上述推送模块33包括读取子模块,所述读取子模块用于通过日志事件处理器监听所述目标消息队列,以及当监听到所述目标消息队列中有新的消息时,读取所述消息。
77.在一些实施例中,上述推送模块33包括发送子模块,所述发送子模块用于通过简单消息模板中的convertandsend函数将所述消息推送到websocket管道中。
78.在一些实施例中,上述前端页面包括用于展示接收到的消息的日志控件,所述消息包括日志内容;所述前端页面根据所述日志内容的大小,设置所述日志控件的滚动高度。
79.在一些实施例中,上述消息还包括日志级别;所述前端页面根据所述日志级别,设置所述日志控件的输出样式,不同日志级别对应不同的输出样式,所述输出样式包括颜色和/或字体。
80.上述装置中各个模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
81.本技术还提供一种电子设备,请参见图4,图4为本技术实施例提供的一种电子设备的结构框图。电子设备可以包括处理器410、通信接口420、存储器430和至少一个通信总线440。其中,通信总线440用于实现这些组件直接的连接通信。其中,本技术实施例中电子设备的通信接口420用于与其他节点设备进行信令或数据的通信。处理器410可以是一种集成电路芯片,具有信号的处理能力。
82.上述的处理器410可以是通用处理器,包括中央处理器(cpu,central processing unit)、网络处理器(np,network processor)等;还可以是数字信号处理器(dsp)、专用集成
电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器410也可以是任何常规的处理器等。
83.存储器430可以是,但不限于,随机存取存储器(ram,random access memory),只读存储器(rom,read only memory),可编程只读存储器(prom,programmable read-only memory),可擦除只读存储器(eprom,erasable programmable read-only memory),电可擦除只读存储器(eeprom,electric erasable programmable read-only memory)等。存储器430中存储有计算机可读取指令,当所述计算机可读取指令由所述处理器410执行时,电子设备可以执行上述图1方法实施例涉及的各个步骤。
84.可选地,电子设备还可以包括存储控制器、输入输出单元。
85.所述存储器430、存储控制器、处理器410、外设接口、输入输出单元各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通信总线440实现电性连接。所述处理器410用于执行存储器430中存储的可执行模块,例如电子设备包括的软件功能模块或计算机程序。
86.输入输出单元用于提供给用户创建任务以及为该任务创建启动可选时段或预设执行时间以实现用户与服务器的交互。所述输入输出单元可以是,但不限于,鼠标和键盘等。
87.可以理解,图4所示的结构仅为示意,所述电子设备还可包括比图4中所示更多或者更少的组件,或者具有与图4所示不同的配置。图4中所示的各组件可以采用硬件、软件或其组合实现。
88.本技术实施例还提供一种存储介质,所述存储介质上存储有指令,当所述指令在计算机上运行时,所述计算机程序被处理器执行时实现方法实施例所述的方法,为避免重复,此处不再赘述。
89.本技术还提供一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得计算机执行方法实施例所述的方法。
90.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本技术的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
91.另外,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
92.所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说
对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
93.以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
94.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应所述以权利要求的保护范围为准。
95.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1