一种记录日志的方法及装置与流程

文档序号:14950569发布日期:2018-07-17 22:27阅读:104来源:国知局
本发明涉及计算机
技术领域
:,特别涉及一种记录日志的方法及装置。
背景技术
::日志对应一个应用来说是非常重要的,通过日志可以了解应用的运行情况。现有技术中,应用的日志的记录主要通过应用的主线程来实现。也就是说,应用的主线程除了要完成应用的主要功能还有向磁盘中记录应用的日志,而记录日志的过程需要占用资源,进而导致主线程在完成应用的主要功能时会受到记录日志这个过程的影响,进而降低了应用的运行性能。技术实现要素:本发明实施例提供了一种记录日志的方法及装置,能够提高应用的运行性能。一方面,本发明实施例提供了一种记录日志的方法,包括:预先配置针对目标应用的日志的配置文件;在启动所述目标应用时,创建日志线程和日志队列,其中,所述日志队列用于存储所述日志队列的外部输入的日志信息;利用所述日志线程执行:实时检测所述日志队列是否存在日志信息,如果是,则从所述日志队列中获取当前日志信息,读取所述配置文件,根据所述配置文件对当前日志信息进行持久化存储。进一步地,所述配置文件中包括:针对至少一种日志类型中每种所述日志类型对应的存储类型,其中,每个所述日志信息对应一个所述日志类型,所述存储类型包括:磁盘文件类型、数据库类型;在所述从所述日志队列中获取当前日志信息之后,进一步包括:确定所述当前日志信息对应的当前日志类型;所述根据所述配置文件对当前日志信息进行持久化存储,包括:确定所述当前日志类型对应的当前存储类型;当所述当前存储类型为所述磁盘文件类型时,将所述当前日志信息持久化存储到磁盘文件中;当所述当前存储类型为所述数据库类型时,将所述当前日志信息持久化存储到数据库中。进一步地,该方法进一步包括:预先为所述目标应用的每个模块设置对应的日志文件夹;在所述从所述日志队列中获取当前日志信息之后,进一步包括:确定生成所述当前日志信息的当前模块;所述根据所述配置文件对当前日志信息进行持久化存储,包括:根据所述配置文件将所述当前日志信息持久化存储到所述当前模块对应的日志文件夹中。进一步地,该方法进一步包括:预先在所述目标应用的开始事件中设置启动程序;所述在启动所述目标应用时,创建日志线程和日志队列,包括:在启动所述目标应用时,执行所述开始事件中的所述启动程序;利用所述启动程序创建所述日志线程和所述日志队列。进一步地,该方法进一步包括:预先针对至少一种日志类型中每种所述日志类型设置对应的日志接口;进一步包括:当所述目标应用调用至少一个所述日志接口中任一目标日志接口时,利用所述目标日志接口获取所述目标日志接口对应的目标日志类型的日志信息,将所述目标日志类型的日志信息输入到所述日志队列中。进一步地,所述配置文件中进一步包括:所述数据库中日志表的配置信息;在所述读取所述配置文件之后,进一步包括:按照所述日志表的配置信息生成所述日志表;所述将所述当前日志信息持久化存储到数据库中,包括:将所述当前日志信息按照所述日志表的配置信息持久化存储到所述日志表中。进一步地,所述存储类型进一步包括:全部类型;所述根据所述配置文件对当前日志信息进行持久化存储,包括:当所述当前存储类型为所述全部类型时,将所述当前日志信息分别持久化存储到磁盘文件和数据库中。进一步地,所述至少一种日志类型包括:调试信息的日志类型、消息信息的日志类型、警告信息的日志类型、错误信息的日志类型和严重错误信息的日志类型中的一个或多个。另一方面,本发明实施例提供了一种记录日志的装置,包括:配置单元,用于配置针对目标应用的日志的配置文件;创建单元,用于在启动所述目标应用时,创建日志线程和日志队列,其中,所述日志队列用于存储所述日志队列的外部输入的日志信息;记录单元,用于利用所述日志线程执行:实时检测所述日志队列是否存在日志信息,如果是,则从所述日志队列中获取当前日志信息,读取所述配置文件,根据所述配置文件对当前日志信息进行持久化存储。进一步地,所述配置文件中包括:针对至少一种日志类型中每种所述日志类型对应的存储类型,其中,每个所述日志信息对应一个所述日志类型,所述存储类型包括:磁盘文件类型、数据库类型;所述记录单元,进一步用于在所述从所述日志队列中获取当前日志信息之后,确定所述当前日志信息对应的当前日志类型;所述记录单元,在执行所述根据所述配置文件对当前日志信息进行持久化存储时,具体用于执行:确定所述当前日志类型对应的当前存储类型;当所述当前存储类型为所述磁盘文件类型时,将所述当前日志信息持久化存储到磁盘文件中;当所述当前存储类型为所述数据库类型时,将所述当前日志信息持久化存储到数据库中。进一步地,该装置进一步包括:第一设置单元,用于为所述目标应用的每个模块设置对应的日志文件夹;所述记录单元,进一步用于在所述从所述日志队列中获取当前日志信息之后,确定生成所述当前日志信息的当前模块;所述记录单元,在执行所述根据所述配置文件对当前日志信息进行持久化存储时,具体用于根据所述配置文件将所述当前日志信息持久化存储到所述当前模块对应的日志文件夹中。进一步地,该装置进一步包括:第二设置单元,用于在所述目标应用的开始事件中设置启动程序;所述创建单元,用于在启动所述目标应用时,执行所述开始事件中的所述启动程序;利用所述启动程序创建所述日志线程和所述日志队列。进一步地,该装置进一步包括:第二设置单元,用于针对至少一种日志类型中每种所述日志类型设置对应的日志接口;进一步包括:输入单元,用于当所述目标应用调用至少一个所述日志接口中任一目标日志接口时,利用所述目标日志接口获取所述目标日志接口对应的目标日志类型的日志信息,将所述目标日志类型的日志信息输入到所述日志队列中。进一步地,所述配置文件中进一步包括:所述数据库中日志表的配置信息;所述记录单元,进一步用于在所述读取所述配置文件之后,按照所述日志表的配置信息生成所述日志表;所述记录单元,在执行所述将所述当前日志信息持久化存储到数据库中时,具体用于将所述当前日志信息按照所述日志表的配置信息持久化存储到所述日志表中。进一步地,所述存储类型进一步包括:全部类型;所述记录单元,在执行所述根据所述配置文件对当前日志信息进行持久化存储时,具体用于执行:当所述当前存储类型为所述全部类型时,将所述当前日志信息分别持久化存储到磁盘文件和数据库中。进一步地,所述至少一种日志类型包括:调试信息的日志类型、消息信息的日志类型、警告信息的日志类型、错误信息的日志类型和严重错误信息的日志类型中的一个或多个。在本发明实施例中,在启动目标应用时,创建日志线程,利用日志线程来持久化存储日志信息,无需通过目标应用的主线程来实现,无需占用目标应用的主线程的资源,不会影响目标应用的运行性能,与利用主线程来记录日志的方案相比,提高了目标应用的运行性能。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明一实施例提供的一种记录日志的方法的流程图;图2是本发明一实施例提供的另一种记录日志的方法的流程图;图3是本发明一实施例提供的一种记录日志的装置的示意图;图4是本发明一实施例提供的另一种记录日志的装置的示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。如图1所示,本发明实施例提供了一种记录日志的方法,该方法可以包括以下步骤:步骤101:预先配置针对目标应用的日志的配置文件;步骤102:在启动所述目标应用时,创建日志线程和日志队列,其中,所述日志队列用于存储所述日志队列的外部输入的日志信息;步骤103:利用所述日志线程执行:实时检测所述日志队列是否存在日志信息,如果是,则从所述日志队列中获取当前日志信息,读取所述配置文件,根据所述配置文件对当前日志信息进行持久化存储。在本发明实施例中,在启动目标应用时,创建日志线程,利用日志线程来持久化存储日志信息,无需通过目标应用的主线程来实现,无需占用目标应用的主线程的资源,不会影响目标应用的运行性能,与利用主线程来记录日志的方案相比,提高了目标应用的运行性能。在本发明一实施例中,所述配置文件中包括:针对至少一种日志类型中每种所述日志类型对应的存储类型,其中,每个所述日志信息对应一个所述日志类型,所述存储类型包括:磁盘文件类型、数据库类型;在所述从所述日志队列中获取当前日志信息之后,进一步包括:确定所述当前日志信息对应的当前日志类型;所述根据所述配置文件对当前日志信息进行持久化存储,包括:确定所述当前日志类型对应的当前存储类型;当所述当前存储类型为所述磁盘文件类型时,将所述当前日志信息持久化存储到磁盘文件中;当所述当前存储类型为所述数据库类型时,将所述当前日志信息持久化存储到数据库中。在本发明实施例中,通过配置文件为每种日志类型配置存储类型。磁盘文件类型是指将日志信息存储为磁盘文件。数据库类型是指将日志信息存储为数据库中的表。在一种实现方式中,在向日志队列中输入日志信息时,还输入每个日志信息对应的日志类型。利用日志线程从日志队列中获取当前日志信息对应的当前日志类型。在本发明一实施例中,该方法进一步包括:预先为所述目标应用的每个模块设置对应的日志文件夹;在所述从所述日志队列中获取当前日志信息之后,进一步包括:确定生成所述当前日志信息的当前模块;所述根据所述配置文件对当前日志信息进行持久化存储,包括:根据所述配置文件将所述当前日志信息持久化存储到所述当前模块对应的日志文件夹中。对于一个应用来说,可以存储多个模块,可以为每个模块设置一个日志文件夹。在一种实现方式中,每个日志信息中可以携带生成该日志信息的模块的信息(例如:模块的标识),通过日志信息中携带的模块的信息可以确定该日志信息对应的模块。在本发明一实施例中,该方法进一步包括:预先在所述目标应用的开始事件中设置启动程序;所述在启动所述目标应用时,创建日志线程和日志队列,包括:在启动所述目标应用时,执行所述开始事件中的所述启动程序;利用所述启动程序创建所述日志线程和所述日志队列。在本发明实施例中,将启动程序设置在目标应用的开始事件中,当启动目标应用时,就会运行开始事件,进而能执行启动程序。在创建日志队列时,可以创建一个日志队列为各种日志信息共用,也可以创建至少两个日志队列。在本发明一实施例中,该方法进一步包括:预先针对至少一种日志类型中每种所述日志类型设置对应的日志接口;进一步包括:当所述目标应用调用至少一个所述日志接口中任一目标日志接口时,利用所述目标日志接口获取所述目标日志接口对应的目标日志类型的日志信息,将所述目标日志类型的日志信息输入到所述日志队列中。在本发明实施例中,预先设置至少一个日志接口,目标应用可以在需要记录日志的位置调用至少一个日志接口,具体地,当目标应用的某个模块需要记录日志时,该模块即可调用至少一个日志接口。在调用日志接口时,可以根据需要记录的日志的日志类型来选择对应的日志接口。举例来说,至少一种日志类型包括:调试信息的日志类型、消息信息的日志类型、警告信息的日志类型、错误信息的日志类型和严重错误信息的日志类型,每中日志类型对应的日志接口如下:sharplog.sharploger.debug("记录调试信息","调试");sharplog.sharploger.info("记录提示信息","提示");sharplog.sharploger.error("记录错误信息","错误");sharplog.sharploger.fatal("记录严重错误信息","严重错误");sharplog.sharploger.warn("记录警告信息","警告");在本发明一实施例中,所述配置文件中进一步包括:所述数据库中日志表的配置信息;在所述读取所述配置文件之后,进一步包括:按照所述日志表的配置信息生成所述日志表;所述将所述当前日志信息持久化存储到数据库中,包括:将所述当前日志信息按照所述日志表的配置信息持久化存储到所述日志表中。在本发明实施例中,通过配置文件可以配置数据库中用于存储日志信息的日志表。日志表的配置信息具体包括:表的名称、表的主键字段、表的消息字段、表的时间戳字段等。在本发明一实施例中,所述存储类型进一步包括:全部类型;所述根据所述配置文件对当前日志信息进行持久化存储,包括:当所述当前存储类型为所述全部类型时,将所述当前日志信息分别持久化存储到磁盘文件和数据库中。在本发明实施例中,可以将日志信息同时存储在磁盘文件和数据库中。在本发明一实施例中,可以通过配置文件配置磁盘文件的路径。在本发明一实施例中,所述至少一种日志类型包括:调试信息的日志类型、消息信息的日志类型、警告信息的日志类型、错误信息的日志类型和严重错误信息的日志类型中的一个或多个。具体地,调试信息的日志类型对应调试信息的日志,消息信息的日志类型对应消息信息的日志,警告信息的日志类型对应警告信息的日志,错误信息的日志类型对应错误信息的日志和严重错误信息的日志类型对应严重错误信息的日志。如图2所示,本发明实施例提供了一种记录日志的方法,该方法可以包括以下步骤:步骤201:预先配置针对目标应用的日志的配置文件,配置文件中包括:针对至少一种日志类型中每种日志类型对应的存储类型,以及数据库中日志表的配置信息,其中,每个日志信息对应一个日志类型,存储类型包括:磁盘文件类型、数据库类型和全部类型。举例来说,配置文件可以如表1所示。表1通过上述描述可见,通过配置文件还可以配置是否记录某个日志类型的日志,例如:当将debug设置为true时,存储调试信息的日志,当将debug设置为false时,不存储调试信息的日志。基于表1的配置文件,可以通过以下方式设置存储类型:以调试信息的日志类型为例,当将debugstoragetype设置为0时,存储类型为全部类型,当将debugstoragetype设置为1时,存储类型为磁盘文件类型,当将debugstoragetype设置为2时,存储类型为数据库类型。通过设置loglevelfield可以设置日志表存储的日志信息对应的日志类型,例如:将loglevelfield设置为调试信息的日志类型,则该日志表中存储调试信息的日志。举例来说,可以设置tablename=logmsg,pkfield=id,也就是说,日志表的名称为logmsg,日志表的主键字段为id。步骤202:预先在目标应用的开始事件中设置启动程序。由于应用在启动时首先会运行开始事件,通过在开始事件中设置启动程序可以使得启动程序随着目标应用的启动而启动,进而能够及时记录目标应用的日志。步骤203:在启动目标应用时,执行开始事件中的启动程序。步骤204:利用启动程序创建日志线程和日志队列。通过启动程序专门为记录日志创建日志线程,避免于使用目标应用的主线程来记录日志。步骤205:利用日志线程实时检测日志队列是否存在日志信息,如果是,则执行步骤206。步骤206:利用日志线程从日志队列中获取当前日志信息。具体地,当日志队列中存储日志信息时,可以逐条获取日志队列中的日志信息。步骤207:利用日志线程确定当前日志信息对应的当前日志类型。步骤208:利用日志线程读取配置文件。步骤209:利用日志线程按照日志表的配置信息生成日志表。具体地,日志表的配置信息包括:日志表的名称、日志表的主键字段、日志表的消息字段、日志表的时间戳字段等。步骤210:利用日志线程确定当前日志类型对应的当前存储类型。具体地,根据配置文件确定出当前存储类型。步骤211:在当前存储类型为磁盘文件类型时,将当前日志信息持久化存储到磁盘文件中。步骤212:在当前存储类型为数据库类型时,将当前日志信息按照日志表的配置信息持久化存储到日志表中。步骤213:在当前存储类型为全部类型时,将当前日志信息持久化存储到磁盘文件中,并将当前日志信息按照日志表的配置信息持久化存储到日志表中。通过本发明实施例,在高并发、高流量的情况下,进行持久化日志时,不会降低应用的响应性能。在本发明一实施例中,可以通过服务端的日志监控模块,实时查找定位日志信息,从而保证快速跟踪定位系统运行情况。基于表1所示的配置文件,可以通过以下代码配置该配置文件:如图3、图4所示,本发明实施例提供了一种记录日志的装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图3所示,为本发明实施例提供的一种记录日志的装置所在设备的一种硬件结构图,除了图3所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图4所示,作为一个逻辑意义上的装置,是通过其所在设备的cpu将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的一种记录日志的装置,包括:配置单元401,用于配置针对目标应用的日志的配置文件;创建单元402,用于在启动所述目标应用时,创建日志线程和日志队列,其中,所述日志队列用于存储所述日志队列的外部输入的日志信息;记录单元403,用于利用所述日志线程执行:实时检测所述日志队列是否存在日志信息,如果是,则从所述日志队列中获取当前日志信息,读取所述配置文件,根据所述配置文件对当前日志信息进行持久化存储。在本发明一实施例中,所述配置文件中包括:针对至少一种日志类型中每种所述日志类型对应的存储类型,其中,每个所述日志信息对应一个所述日志类型,所述存储类型包括:磁盘文件类型、数据库类型;所述记录单元,进一步用于在所述从所述日志队列中获取当前日志信息之后,确定所述当前日志信息对应的当前日志类型;所述记录单元,在执行所述根据所述配置文件对当前日志信息进行持久化存储时,具体用于执行:确定所述当前日志类型对应的当前存储类型;当所述当前存储类型为所述磁盘文件类型时,将所述当前日志信息持久化存储到磁盘文件中;当所述当前存储类型为所述数据库类型时,将所述当前日志信息持久化存储到数据库中。在本发明一实施例中,该装置进一步包括:第一设置单元,用于为所述目标应用的每个模块设置对应的日志文件夹;所述记录单元,进一步用于在所述从所述日志队列中获取当前日志信息之后,确定生成所述当前日志信息的当前模块;所述记录单元,在执行所述根据所述配置文件对当前日志信息进行持久化存储时,具体用于根据所述配置文件将所述当前日志信息持久化存储到所述当前模块对应的日志文件夹中。在本发明一实施例中,该装置进一步包括:第二设置单元,用于在所述目标应用的开始事件中设置启动程序;所述创建单元,用于在启动所述目标应用时,执行所述开始事件中的所述启动程序;利用所述启动程序创建所述日志线程和所述日志队列。在本发明一实施例中,该装置进一步包括:第二设置单元,用于针对至少一种日志类型中每种所述日志类型设置对应的日志接口;进一步包括:输入单元,用于当所述目标应用调用至少一个所述日志接口中任一目标日志接口时,利用所述目标日志接口获取所述目标日志接口对应的目标日志类型的日志信息,将所述目标日志类型的日志信息输入到所述日志队列中。在本发明一实施例中,所述配置文件中进一步包括:所述数据库中日志表的配置信息;所述记录单元,进一步用于在所述读取所述配置文件之后,按照所述日志表的配置信息生成所述日志表;所述记录单元,在执行所述将所述当前日志信息持久化存储到数据库中时,具体用于将所述当前日志信息按照所述日志表的配置信息持久化存储到所述日志表中。在本发明一实施例中,所述存储类型进一步包括:全部类型;所述记录单元,在执行所述根据所述配置文件对当前日志信息进行持久化存储时,具体用于执行:当所述当前存储类型为所述全部类型时,将所述当前日志信息分别持久化存储到磁盘文件和数据库中。在本发明一实施例中,所述至少一种日志类型包括:调试信息的日志类型、消息信息的日志类型、警告信息的日志类型、错误信息的日志类型和严重错误信息的日志类型中的一个或多个。上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。本发明实施例提供了一种可读介质,包括执行指令,当存储控制器的处理器执行所述执行指令时,所述存储控制器执行本发明实施例提供的任意一种记录日志的方法。本发明实施例提供了一种存储控制器,包括:处理器、存储器和总线;所述存储器用于存储执行指令,所述处理器与所述存储器通过所述总线连接,当所述存储控制器运行时,所述处理器执行所述存储器存储的执行指令,以使所述存储控制器执行本发明实施例提供的任意一种记录日志的方法。本发明各个实施例至少具有如下有益效果:1、在本发明实施例中,在启动目标应用时,创建日志线程,利用日志线程来持久化存储日志信息,无需通过目标应用的主线程来实现,无需占用目标应用的主线程的资源,不会影响目标应用的运行性能,与利用主线程来记录日志的方案相比,提高了目标应用的运行性能。2、在本发明实施例中,在高并发、高流量的情况下,进行持久化日志时,可以通过专门用来记录日志的日志线程来记录日志,不会降低应用的响应性能。需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个······”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质中。最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1