日志获取方法及设备与流程

文档序号:17641295发布日期:2019-05-11 00:41阅读:415来源:国知局
日志获取方法及设备与流程

本申请实施例涉及数据处理领域,尤其涉及一种日志获取方法及设备。



背景技术:

系统程序在上线运行过程中,往往会出现一些问题,技术人员在分析和定位问题的时候通常需要发生问题时刻的系统日志,通过系统日志分析发生问题时刻系统内部的运行情况,但是在编写系统程序时,为提高编写效率,并不是在每一处都增加用于获取系统日志的代码。

现有的在系统程序内增加系统日志的方案中,需要线下在系统程序中增加相应的代码后,进行重新编译,将编译好的系统安装到目标主机上,重启目标主机,待问题复现后获取日志信息,或者,通过系统预留的一个命令接口,打开系统程序中的一个开关,将事先已经准备好的日志信息获取出来。

然而,现有的增加系统日志的方案存在效率较低的问题。对于上述第一种方案,当遇到系统重启后复现概率较低的系统问题时,需要耗费巨大的时间和精力;对于第二种方案,若事先准备好的日志信息不足以分析和定位系统问题时,需采用第一种方案线下增加相应的代码后重启系统,同样会遇到系统重启后系统问题复现概率的问题。



技术实现要素:

本申请实施例提供一种日志获取方法及设备,以实现根据需要动态的获取日志并且提高增加系统日志的效率。

第一方面,本申请实施例提供一种日志获取方法,包括:

接收程序替换指令,所述程序替换指令包括需替换的被替换程序的信息;

根据所述程序替换指令,将系统程序中的被替换程序替换为跳转指令,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码。

在一种可能的设计中,所述还包括:

将所述被替换程序存储到第二地址;

获取到所述日志信息后,用所述第二地址下存储的被替换程序替换所述系统程序中的所述跳转指令。

在一种可能的设计中,所述被替换程序的信息包括所述被替换程序的内存地址;所述根据所述程序替换指令,将系统程序中的被替换程序替换为跳转指令,包括:

将所述跳转指令转换成可识别的第一机器码,存于第一数组内;

将系统程序中所述内存地址下的机器码替换为所述第一数组。

在一种可能的设计中,所述将所述被替换程序存储到第二地址,包括:

将所述被替换程序转换成可识别的第二机器码,存于第二数组内;

所述获取到所述日志信息后,用所述第二地址下存储的被替换程序替换所述系统程序中的所述跳转指令,包括:

获取到所述日志信息后,用所述第二数组替换当前所述系统程序中所述内存地址下的机器码。

在一种可能的设计中,所述被替换程序为其对应代码的头部指令代码。

第二方面,本申请实施例提供一种日志获取设备,包括:

接收模块,用于接收程序替换指令,所述程序替换指令包括需替换的被替换程序的信息;

第一替换模块,用于根据所述程序替换指令,将系统程序中的被替换程序替换为跳转指令,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码。

在一种可能的设计中,所述设备还包括:

存储模块,用于将所述被替换程序存储到第二地址;

第二替换模块,用于获取到所述日志信息后,用所述第二地址下存储的被替换程序替换所述系统程序中的所述跳转指令。

在一种可能的设计中,所述被替换程序的信息包括所述被替换程序的内存地址;

所述第一替换模块,具体用于将所述跳转指令转换成可识别的第一机器码,存于第一数组内;

将系统程序中所述内存地址下的机器码替换为所述第一数组。

在一种可能的设计中,所述存储模块,具体用于将所述被替换程序转换成可识别的第二机器码,存于第二数组内;

所述第二替换模块,具体用于获取到所述日志信息后,用所述第二数组替换当前所述系统程序中所述内存地址下的机器码。

在一种可能的设计中,所述被替换程序为其对应代码的头部指令代码。

第三方面,本申请实施例提供一种日志获取设备,包括:至少一个处理器和存储器;

所述存储器存储计算机执行指令;

所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第一方面以及第一方面各种可能的设计所述的日志获取方法。

第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第一方面以及第一方面各种可能的设计所述的日志获取方法。

本实施例提供的日志获取方法及设备,该方法通过接收程序替换指令,所述程序替换指令包括需替换的被替换程序的信息;根据所述程序替换指令,将系统程序中的被替换程序替换为跳转指令,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码,能够实现根据需要动态的获取日志并且提高增加系统日志的效率。

附图说明

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

图1为本申请一实施例提供的日志获取方法的流程示意图一;

图2为本申请一实施例提供的日志获取方法的系统内存的结构示意图;

图3为本申请又一实施例提供的日志获取方法的流程示意图二;

图4为本申请再一实施例提供的日志获取方法的流程示意图三;

图5为本申请又一实施例提供的日志获取方法的流程示意图四;

图6为本申请又一实施例提供的日志获取方法的流程示意图五;

图7为本申请一实施例提供的日志获取设备的结构示意图一;

图8为本申请又一实施例提供的日志获取设备的结构示意图二;

图9为本申请一实施例提供的日志获取设备的硬件结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

下面采用具体的实施例来说明本申请实施例提供的日志获取方法。

图1为本申请一实施例提供的日志获取方法的流程示意图一。如图1所示,该方法包括:

s101、接收程序替换指令,所述程序替换指令包括需替换的被替换程序的信息。

软件系统在上线运行过程中,往往会出现一些问题,技术人员在分析和定位问题的时候通常需要发生问题时刻的系统日志,这些系统日志记录了系统内部的运行情况,比如当前系统在哪个具体的程序代码中运行,该程序代码中使用的变量的取值是多少,是否符合预期等等。但是在编写软件系统时,出于效率的考虑,不可能每一处都增加获取系统日志的相应代码。

在系统出现问题后,若技术人员初步判定的可能存在问题的程序代码中没有预先添加获取系统日志的相应代码,则无法获取该程序代码的系统日志。

所述被替换程序即为该未预先添加获取系统日志的相应代码的可能存在问题的程序代码所在的程序。

所述被替换程序的信息包括被替换程序的内存地址信息。

所述程序替换指令可以由技术人员预存在存储器内,需要获取被替换程序的系统日志时,则读取存储器内的相应的程序替换指令。

可选地,所述程序替换指令,可以包括多个被替换程序的信息,以便于实现对多个被替换程序进行替换,获取该多个被替换程序对应的日志信息。

s102、根据所述程序替换指令,将系统程序中的被替换程序替换为跳转指令,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码。

图2为本申请一实施例提供的日志获取方法的系统内存的结构示意图,如图2所示,系统内存地址包括位于两端的内存起始地址与内存结束地址。被替换程序被加载到系统内存地址a处,替换程序被加载到系统内存地址b处,即将系统内存地址b作为第一地址。运行加载于系统内存地址c处的程序替换指令,程序替换指令运行后,会将系统内存地址a处存储的被替换程序的代码替换为跳转指令,当系统运行到系统内存地址a处当前存储的跳转指令时,跳转至系统内存地址b(第一地址)处,执行系统内存地址b处存储的替换程序的机器码指令,因为该替换程序相对于被替换程序增加了用于获取日志信息的代码,则当系统内存地址b处的替换程序执行完成后,即可获取该替换程序的系统日志,并将该系统日志推送给技术人员。

所述替换程序,包括所述被替换程序对应的程序代码,以及用于获取被替换程序所对应的日志信息的代码,即所述替换程序相对于所述被替换程序来说,在所述被替换程序本身的程序代码基础上,新添加了用于获取该被替换程序对应的日志信息的代码。

日志信息是指相关计算机系统发生的事务或操作的记录。在各种应用系统,如银行系统、门户网站系统、电子商务系统、公司内部的财务系统等等应用系统中,都会将系统运行过程中所发生的一切记录为日志,并生成日志文件,然后通过对日志文件的解析,就可以详细了解系统的整个运行过程。日志信息可以包括相应程序中变量的取值。

所述跳转指令可以为普通寄存器跳转指令或者为带返回地址的寄存器跳转指令。使用普通寄存跳转指令,可以在被替换程序的代码里实现任意位置的返回。使用带返回地址的寄存器跳转指令,可以在跳转时记录入口地址,当执行完替换程序返回时直接回到入口地址,通过这类跳转指令可以实现程序代码的完美替换。

本实施例提供的日志获取方法,通过接收程序替换指令,所述程序替换指令包括需替换的被替换程序的信息;根据所述程序替换指令,将系统程序中的被替换程序替换为跳转指令,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码,能够实现根据需要动态的获取日志并且提高增加系统日志的效率。

图3为本申请又一实施例提供的日志获取方法的流程示意图二。如图3所示,该方法包括:

s301、接收程序替换指令,所述程序替换指令包括需替换的被替换程序的信息。

s302、根据所述程序替换指令,将系统程序中的被替换程序替换为跳转指令,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码。

本实施例中,s301和s302与图1实施例中s101和和s102类似,此处不再赘述。

s303、将所述被替换程序存储到第二地址。

可选地,所述第二地址为系统内存地址或硬盘地址。

s304、获取到所述日志信息后,用所述第二地址下存储的被替换程序替换所述系统程序中的所述跳转指令。

可选地,获取到所述日志信息后,即当系统内存地址b处的替换程序执行完成后,将所述第二地址下存储的被替换覆盖系统内存a处当前存储的内容,即所述系统程序中的所述跳转指令。

本实施例提供的日志获取方法,通过将被替换程序做备份,在运行完第一地址下存储的替换程序,获取到日志信息后,再将被替换程序还原,能够不破坏原有系统程序,保证系统程序的完整,便于在确定系统问题不是被替换程序导致后,进一步在其他程序中查找分析系统问题。

图4为本申请再一实施例提供的日志获取方法的流程示意图三。如图4所示,该方法包括:

s401、接收程序替换指令,所述程序替换指令包括需替换的被替换程序的信息。

本实施例中,s401与图1实施例s101类似,此处不做特别赘述。

s402、根据所述程序替换指令,将所述跳转指令转换成可识别的第一机器码,存于第一数组内。

本实施例中,机器码(machinecode)是一种指令集的体系。这种指令集,也称机器语言(machinelanguage),机器码是电脑的cpu可直接解读的数据。机器码有时也被称为原生码(nativecode),这个名词比较强调某种编程语言或库,它与运行平台相关的部份。

虽然大多数的语言可以既可被编译(compiled)又可被解译(interpreted),但大多数只在一种情况下能够良好运行。在一些编程系统中,程序要经过几个阶段的编译,一般而言,后阶段的编译往往更接近机器语言。这种常用的使用技巧最早在1960年代末用于bcpl,编译程序先编译一个叫做“0代码”的转换程序(representation),然后再使用虚拟器转换到可以运行于机器上的真实代码。这种成功的技巧之后又用于pascal和p-code,以及smalltalk和二进制码,虽然在很多时候,中间过渡的代码往往是解译,而不是编译的。

数组在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在c语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

可选地,将所述跳转指令转换成计算机可识别的二进制机器码,存于第一数组内。

s403、所述被替换程序的信息包括所述被替换程序的内存地址,将系统程序中所述内存地址下的机器码替换为所述第一数组,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码。

本实施例通过采用数组方式来存储跳转指令,能够使用一块连续的内存空间存储跳转指令,并且能够避免采用定义变量的方式导致的操作代码臃肿,工作量大的问题。

s404、将所述被替换程序存储到第二地址。

s405、获取到所述日志信息后,用所述第二地址下存储的被替换程序替换所述系统程序中的所述跳转指令。

本实施例中,s404和s405与图3实施例s303和s304相类似,此处不再赘述。

本实施例提供的日志获取方法,通过将跳转指令转换成可识别的机器码,并且采用数组方式来存储跳转指令,能够实现使用一块连续的内存空间存储跳转指令,并且可以避免通过采用定义变量的方式而导致的操作代码臃肿,工作量大的问题。

图5为本申请又一实施例提供的日志获取方法的流程示意图四。如图5所示,该方法包括:

s501、接收程序替换指令,所述程序替换指令包括需替换的被替换程序的信息。

本实施例中,s501与图1实施例s101相类似,此处不再赘述。

s502、根据所述程序替换指令,将所述跳转指令转换成可识别的第一机器码,存于第一数组内。

s503、所述被替换程序的信息包括所述被替换程序的内存地址,将系统程序中所述内存地址下的机器码替换为所述第一数组,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码。

本实施例中,s502和s503与图4实施例s402和s403相类似,此处不再赘述。

s504、将所述被替换程序转换成可识别的第二机器码,存于第二数组内。

可选地,所述第二机器码可以为二进制机器码。

s505、获取到所述日志信息后,用所述第二数组替换当前所述系统程序中所述内存地址下的机器码。

可选地,执行完第一地址下存储的替换程序后,用所述第二数组内存储的第二机器码覆盖所述内存地址下当前存储的所述第一机器码。

本实施例提供的日志获取方法,通过将所述被替换程序转换成可识别的第二机器码并采用数组形式存储所述第二机器码,能够实现使用一块连续的内存空间存储所述被替换程序转换成的所述第二机器码,代码的大小不受限制,并且可以避免采用定义变量的方式导致的操作代码臃肿,工作量大的问题。

图6为本申请又一实施例提供的日志获取方法的流程示意图五。如图6所示,该方法包括:

s601、接收程序替换指令,所述程序替换指令包括需替换的被替换程序的头部指令代码的信息。

可选地,本实施例可以采用c语言作为程序编写语言,并且通过x86架构cpu实施。

可选地,被替换程序的头部指令代码为在c语言中被称为headerfile的头文件对应的代码。一般在一个应用开发体系中,功能的真正逻辑实现是以硬件层为基础,在驱动程序、功能层程序以及用户的应用程序中完成的。头文件的主要作用在于多个代码文件全局变量(函数)的重用、防止定义的冲突,对各个被调用函数给出一个描述,其本身不需要包含程序的逻辑实现代码,它只起描述性作用,用户程序只需要按照头文件中的接口声明来调用相关函数或变量,链接器会从库中寻找相应的实际定义代码。

s602、根据所述程序替换指令,将系统程序中的被替换程序的头部指令代码替换为跳转指令,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码。

该方法还可以包括:

s603、将所述被替换程序的头部指令代码存储到第二地址;

s604、获取到所述日志信息后,用所述第二地址下存储的被替换程序的头部指令代码替换所述系统程序中的所述跳转指令。

本实施例提供的日志获取方法,通过根据程序替换指令,仅将系统程序中的被替换程序的头部指令代码替换为跳转指令,并将所述头部指令代码保存,在获取日志信息后,还原系统程序,能够在整个程序替换过程中减少占用系统内存,避免浪费资源,并可加快运行速度,节省时间,降低成本。

图7为本申请一实施例提供的日志获取设备的结构示意图一。如图7所示,该日志获取设备70包括:接收模块701、第一替换模块702。

接收模块701,用于接收程序替换指令,所述程序替换指令包括需替换的被替换程序的信息;

第一替换模块702,用于根据所述程序替换指令,将系统程序中的被替换程序替换为跳转指令,所述跳转指令用于跳转至第一地址并执行所述第一地址下存储的替换程序,所述替换程序包括用于获取日志信息的代码。

本申请实施例提供的日志获取设备,

图8为本申请又一实施例提供的日志获取设备的结构示意图二。如图8所示,该日志获取设备80还包括:存储模块703、第二替换模块704。

存储模块703,用于将所述被替换程序存储到第二地址;

第二替换模块704,用于获取到所述日志信息后,用所述第二地址下存储的被替换程序替换所述系统程序中的所述跳转指令。

可选地,所述被替换程序的信息包括所述被替换程序的内存地址;

所述第一替换模块702,具体用于将所述跳转指令转换成可识别的第一机器码,存于第一数组内;

将系统程序中所述内存地址下的机器码替换为所述第一数组。

可选地,所述存储模块703,具体用于将所述被替换程序转换成可识别的第二机器码,存于第二数组内;

所述第二替换模块704,具体用于获取到所述日志信息后,用所述第二数组替换当前所述系统程序中所述内存地址下的机器码。

可选地,所述被替换程序为其对应代码的头部指令代码。

本申请实施例提供的端点检测设备,可用于执行上述的方法实施例,其实现原理和技术效果类似,本实施例此处不再赘述。

图9为本申请一实施例提供的日志获取设备的硬件结构示意图。如图9所示,本实施例提供的日志获取设备90包括:至少一个处理器901和存储器902。其中,处理器901和存储器902通过总线903连接。

在具体实现过程中,至少一个处理器901执行所述存储器902存储的计算机执行指令,使得至少一个处理器901执行如上日志获取设备90所执行的日志获取方法。

处理器901的具体实现过程可参见上述方法实施例,其实现原理和技术效果类似,本实施例此处不再赘述。

在上述的图9所示的实施例中,应理解,处理器可以是中央处理单元(英文:centralprocessingunit,简称:cpu),还可以是其他通用处理器、数字信号处理器(英文:digitalsignalprocessor,简称:dsp)、专用集成电路(英文:applicationspecificintegratedcircuit,简称:asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

存储器可能包含高速ram存储器,也可能还包括非易失性存储nvm,例如至少一个磁盘存储器。

总线可以是工业标准体系结构(industrystandardarchitecture,isa)总线、外部设备互连(peripheralcomponent,pci)总线或扩展工业标准体系结构(extendedindustrystandardarchitecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。

本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上日志获取设备执行的日志获取方法。

上述的计算机可读存储介质,上述可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。可读存储介质可以是通用或专用计算机能够存取的任何可用介质。

一种示例性的可读存储介质耦合至处理器,从而使处理器能够从该可读存储介质读取信息,且可向该可读存储介质写入信息。当然,可读存储介质也可以是处理器的组成部分。处理器和可读存储介质可以位于专用集成电路(applicationspecificintegratedcircuits,简称:asic)中。当然,处理器和可读存储介质也可以作为分立组件存在于设备中。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

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