进程内部日志上报的方法和装置与流程

文档序号:11154819阅读:667来源:国知局
进程内部日志上报的方法和装置与制造工艺

本发明实施例涉及通信技术领域,尤其是一种进程内部日志上报的方法和装置。



背景技术:

随着计算机应用技术的迅速发展,现有的终端设备一般都具备存储日志文件的功能,日志文件是指将终端的操作及操作结果按时间顺序排列所组成的集合。每个日志文件由多条日志记录组成,每条日志记录可描述终端执行的一次操作。为了便于系统的整体维护,终端每执行一次操作,系统都会以日志记录的形式,将终端所执行的操作、操作发生时间以及操作结果等操作相关内容写入到日志文件中。通常终端所执行的操作有正确操作,还有错误操作,相应地,日志文件中存储的日志记录,不仅有终端执行正确操作的正确操作日志记录,而且还有终端执行错误操作的错误操作日志记录这样,在后续流程中,通过监控终端设备记录的日志信息数据,可以获取终端设备的运行状态,便于管理人员和维护人员能够更加方便地分析终端设备的运行数据,解决运行中各应用出现的技术故障,并在一定程度上预测终端设备中相应应用未来可能发生的异常,从而规避未来出现的技术故障,保障终端设备的正常运行。对于进程日志信息数据监控,业界主要是采用读取并解析日志文件然后上报给日志收集服务,这种方案可以和业务进程解耦,互不影响。但分开会难以管理日志文件,也会受到服务器硬盘不足的影响,导致遗漏掉日志上报。



技术实现要素:

本发明的目的旨在至少能解决上述的技术缺陷之一,特别是与业务进程解耦难以管理该日志文件,导致遗漏上报的技术缺陷,而提供一种进程内部日志上报的方法和装置,

基于上述目的,本发明采取如下技术方案:

本发明实施例提供一种进程内部日志上报的方法,包括如下步骤:

通过业务线程输出进程内部日志;

将所述进程内部日志移交给异步线程汇总日志信息;

将所述日志信息上报给日志收集服务器。

在其中一个实施例中,所述通过业务线程输出进程内部日志,包括:通过业务线程调用log4j接口输出进程内部日志。

在其中一个实施例中,所述通过业务线程输出日志之前,还包括:对进程进行内部监控,产生进程内部日志。

在其中一个实施例中,所述通过业务线程输出进程内部日志之前,还包括:

确定当前时间为日志上报时间点。

在其中一个实施例中,将所述日志信息上报给日志收集服务器,包括:

将所述日志信息进行缓存;

将缓存的所述日志信息上报给日志收集服务器;

判断是否上报成功;

若上报成功,删除缓存的所述日志信息;

若上报不成功,重新将缓存的所述日志信息上报给日志收集服务器。

本发明实施例还提供一种进程内部日志上报的装置,包括:

输出模块,用于通过业务线程输出进程内部日志;

移交模块,用于将所述进程内部日志移交给异步线程汇总日志信息;

上报模块,用于将所述日志信息上报给日志收集服务器。

在其中一个实施例中,所述输出模块,具体用于通过业务线程调用l og4j接口输出进程内部日志。

在其中一个实施例中,还包括输出模块,用于所述通过业务线程输出日志之前,对进程进行内部监控,产生进程内部日志。

在其中一个实施例中,还包括输出模块,用于所述通过业务线程输出进程内部日志之前,确定当前时间为日志上报时间点。

在其中一个实施例中,所述上报模块,包括:

缓存模块,用于将所述日志信息进行缓存;

缓存上报模块,用于将缓存的所述日志信息上报给日志收集服务器;

判断模块,用于判断是否上报成功;

若上报成功,删除缓存的所述日志信息;

若上报不成功,重新将缓存的所述日志信息上报给日志收集服务器。

本发明实施例提供的技术方案带来的有益效果:

本方案中客户端通过内嵌在业务程序内部的日志模块进行日志输出,并在本地存储各业务产生的日志数据,然后通过预先编制的调用程序以及通用接口,将存储在本地的各业务日志数据集中起来上报至日志收集服务器以备后续分析。通过异步线程汇总上报日志信息,使用单独的进程来执行日志输出的功能,不仅可以提高日志执行效率,减少日志功能对正常业务的影响,而且把监控日志上报代码内嵌到正常业务代码中,连带业务进程一起进行部署,在管理上非常方便。除此之外还利用了原有的日志接口,使用简洁方便,用户不需要做任何调用上的改动。

本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

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

图1为本发明实施例提供的进程内部日志上报方法流程图。

图2为本发明实施例提供的进程内部日志上报装置的结构示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。

日志文件是指将终端的操作及操作结果按时间顺序排列所组成的集合。每个日志文件由多条日志记录组成,每条日志记录可描述终端执行的一次操作。为了便于系统的整体维护,终端每执行一次操作,系统都会以日志记录的形式,将终端所执行的操作、操作发生时间以及操作结果等操作相关内容写入到日志文件中。客户端通过内嵌在业务程序内部的日志模块进行日志文件的输出,并在本地存储各业务产生的日志数据,然后通过预先编制的调用程序以及通用接口,将存储在本地的各业务日志数据集中起来上报至日志收集服务器以备后续分析。

如图1所示是本发明实施例提供的进程内部日志上报方法第一实施例的方法流程图,包括如下步骤:

S101:通过业务线程输出进程内部日志。

日志对于一个系统来说非常重要,查找异常信息、分析系统运行情况等都需要用到日志。程序开发环境中的日志记录是由嵌入在程序中以输出一些对开发人员有用信息的语句所组成。在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。

为了解进程变化情况,需要通过应用程序实时对进程进行内部监控,并产生进程内部日志。该程序是一个常驻客户端的程序,周期性的检查该日志存储区中是否有新的日志数据;有数据则读取该日志存储区存储的日志数据,并将该日志数据写入缓存文件中。待到预设的日志上报时间点,通过业务线程调用l og4j接口输出进程内部日志。

log4j是大型系统必不可少的一部分,可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位。Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有error、warn、info、debug分别用来指定这条日志信息的重要程度,由于日志级别的不同,对系统的性能影响也是有很大的差距,日志级别越高,性能越高;日志信息的输出目的指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:public static Logger getLogger(String name),通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

static Logger logger=Logger.getLogger(ServerWithLog4j.class.getName())

当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:BasicConfigurator.configure():自动快速地使用缺省Log4j环境。PropertyConfigurator.configure(String configFilename):读取使用Java的特性文件编写的配置文件。DOMConfigurator.configure(String filename):读取XML形式的配置文件。

当上述两个必要步骤执行完毕,就可以使用不同优先级别的日志记录语句插入到想要记录日志的任何地方,业务方不需要修改原先的调用方法,直接通过log4j提供的接口就能被异步的日志上报线程处理,其语法如下:

Logger.debug(Object message)

Logger.info(Object message)

Logger.warn(Object message)

Logger.error(Object message)

S102:将所述进程内部日志移交给异步线程汇总日志信息。

log4j对系统性能的影响程度主要体现在以下几方面:

1、日志输出的目的地,输出到控制台的速度比输出到文件系统的速度要慢。2、日志输出格式不一样对性能也会有影响,如简单输出布局(SimpleLayout)比格式化输出布局(PatternLayout)输出速度要快。可以根据需要尽量采用简单输出布局格式输出日志信息。3、日志级别越低输出的日志内容就越多,对系统系能影响很大。4、日志输出方式的不同,对系统系能也是有一定影响的,采用异步输出方式比同步输出方式性能要高。5、每次接收到日志输出事件就打印一条日志内容比当日志内容达到一定大小时打印系能要低。

针对上述第4,5点,对日志配置文件做如下配置:设置日志缓存,以及缓存大小,通常输出缓冲日志是以8K为单位的,因为磁盘的一个block为8K,这样设置可以减少碎片;设置日志输出为异步方式,磁盘IO操作、网络IO操作、JDBC操作等都是非常耗时的,将这些耗时操作从主线程当中分离出去以实现性能提升,当线程间同步开销小于耗时操作时使用异步方式使最为合适的。通过异步线程汇总日志信息,拓展后收集上报至日志收集服务器。

S103:将所述日志信息上报给日志收集服务器。

通过日志上报程序与日志收集服务器之间的网络连接,将上述缓存文件中包含的日志数据上报至日志服务器。包括:将所述日志信息进行缓存;将缓存的所述日志信息上报给日志收集服务器;判断是否上报成功;若上报成功,删除缓存的所述日志信息;若上报不成功,重新将缓存的所述日志信息上报给日志收集服务器以保证日志数据存储的高可靠性。

在该缓存机制的作用下,一方面,使得日志数据存储系统的存储效率、可用性及可靠性得到很大提升,极大的降低了丢失日志数据的风险,任何一个环节的程序发生故障,理论上都不会导致日志数据的丢失,例如,当日志服务器端的日志接收进程发生故障,则客户端的日志数据都会被暂时存放在本地的缓存文件夹中,直到日志上报进程和日志服务器之间的连接恢复,这种特性对于日志数据存储系统的部署和调试来说也很方便,可以随时中断日志数据存储系统的某个程序进行升级,或者通过查看缓存文件来调试系统。因而,便于搜集存储离线日志,并基于日志进行必要数据分析。另一方面,缓存机制的运用使得日志上报路径上的各个业务程序异步工作,日志数据存储系统更容易进行维护,并通过横向扩展提高日志存储系统的吞吐量,举例来说,如果上报日志数据的客户端较多,日志服务器的网络输入输出带宽不够,则可以启动多个日志服务器接收日志数据,通过将多个日志服务器生成的日志数据缓存文件集中后进行后续处理的方法来解决问题。

本方案中客户端通过内嵌在业务程序内部的日志模块进行日志输出,并在本地存储各业务产生的日志数据,然后通过预先编制的调用程序以及通用接口,将存储在本地的各业务日志数据集中起来上报至日志收集服务器以备后续分析。通过异步线程汇总上报日志信息,使用单独的进程来执行日志输出的功能,不仅可以提高日志执行效率,减少日志功能对正常业务的影响,而且把监控日志上报代码内嵌到正常业务代码中,连带业务进程一起进行部署,在管理上非常方便。除此之外还利用了原有的日志接口,使用简洁方便,用户不需要做任何调用上的改动。

图2为一个实施例的进程内部日志上报装置的结构示意图。

基于上述的进程内部日志上报方法,本发明还提供一种进程内部日志上报装置,其包括:输出模块201、移交模块202以及上报模块203。

输出模块201用于通过业务线程输出进程内部日志;移交模块202用于将所述进程内部日志移交给异步线程汇总日志信息;上报模块203用于将所述日志信息上报给日志收集服务器。

输出模块201,通过业务线程输出进程内部日志。

日志对于一个系统来说非常重要,查找异常信息、分析系统运行情况等都需要用到日志。程序开发环境中的日志记录是由嵌入在程序中以输出一些对开发人员有用信息的语句所组成。在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。

为了解进程变化情况,需要通过应用程序实时对进程进行内部监控,并产生进程内部日志。该程序是一个常驻客户端的程序,周期性的检查该日志存储区中是否有新的日志数据;有数据则读取该日志存储区存储的日志数据,并将该日志数据写入缓存文件中。待到预设的日志上报时间点,输出模块201通过业务线程调用log4j接口输出进程内部日志。

log4j是大型系统必不可少的一部分,可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位。Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有error、warn、info、debug分别用来指定这条日志信息的重要程度,由于日志级别的不同,对系统的性能影响也是有很大的差距,日志级别越高,性能越高;日志信息的输出目的指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:public static Logger getLogger(String name),通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:

static Logger logger=Logger.getLogger(ServerWithLog4j.class.getName())

当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:BasicConfigurator.configure():自动快速地使用缺省Log4j环境。PropertyConfigurator.configure(String configFilename):读取使用Java的特性文件编写的配置文件。DOMConfigurator.configure(String filename):读取XML形式的配置文件。

当上述两个必要步骤执行完毕,输出模块201就可以使用不同优先级别的日志记录语句插入到想要记录日志的任何地方,业务方不需要修改原先的调用方法,直接通过log4j提供的接口就能被异步的日志上报线程处理,其语法如下:

Logger.debug(Object message)

Logger.info(Object message)

Logger.warn(Object message)

Logger.error(Object message)

移交模块202,将所述进程内部日志移交给异步线程汇总日志信息。

log4j对系统性能的影响程度主要体现在以下几方面:

1、日志输出的目的地,输出到控制台的速度比输出到文件系统的速度要慢。2、日志输出格式不一样对性能也会有影响,如简单输出布局(SimpleLayout)比格式化输出布局(PatternLayout)输出速度要快。可以根据需要尽量采用简单输出布局格式输出日志信息。3、日志级别越低输出的日志内容就越多,对系统系能影响很大。4、日志输出方式的不同,对系统系能也是有一定影响的,采用异步输出方式比同步输出方式性能要高。5、每次接收到日志输出事件就打印一条日志内容比当日志内容达到一定大小时打印系能要低。

针对上述第4,5点,对日志配置文件做如下配置:设置日志缓存,以及缓存大小,通常输出缓冲日志是以8K为单位的,因为磁盘的一个block为8K,这样设置可以减少碎片;移交模块202设置日志输出为异步方式,磁盘IO操作、网络IO操作、JDBC操作等都是非常耗时的,将这些耗时操作从主线程当中分离出去以实现性能提升,当线程间同步开销小于耗时操作时使用异步方式使最为合适的。移交模块202通过异步线程汇总日志信息,拓展后收集上报至日志收集服务器。

上报模块203,将所述日志信息上报给日志收集服务器。

上报模块203通过日志上报程序与日志收集服务器之间的网络连接,将上述缓存文件中包含的日志数据上报至日志服务器。包括:将所述日志信息进行缓存;将缓存的所述日志信息上报给日志收集服务器;判断是否上报成功;若上报成功,删除缓存的所述日志信息;若上报不成功,重新将缓存的所述日志信息上报给日志收集服务器。这样,可以保证日志数据存储的高可靠性。

在该缓存机制的作用下,一方面,使得日志数据存储系统的存储效率、可用性及可靠性得到很大提升,极大的降低了丢失日志数据的风险,任何一个环节的程序发生故障,理论上都不会导致日志数据的丢失,例如,当日志服务器端的日志接收进程发生故障,则客户端的日志数据都会被暂时存放在本地的缓存文件夹中,直到日志上报进程和日志服务器之间的连接恢复,这种特性对于日志数据存储系统的部署和调试来说也很方便,可以随时中断日志数据存储系统的某个程序进行升级,或者通过查看缓存文件来调试系统。因而,便于搜集存储离线日志,并基于日志进行必要数据分析。另一方面,缓存机制的运用使得日志上报路径上的各个业务程序异步工作,日志数据存储系统更容易进行维护,并通过横向扩展提高日志存储系统的吞吐量,举例来说,如果上报日志数据的客户端较多,日志服务器的网络输入输出带宽不够,则可以启动多个日志服务器接收日志数据,通过将多个日志服务器生成的日志数据缓存文件集中后进行后续处理的方法来解决问题。

本方案中客户端通过内嵌在业务程序内部的日志模块进行日志输出,并在本地存储各业务产生的日志数据,然后通过预先编制的调用程序以及通用接口,将存储在本地的各业务日志数据集中起来上报至日志收集服务器以备后续分析。通过异步线程汇总上报日志信息,使用单独的进程来执行日志输出的功能,不仅可以提高日志执行效率,减少日志功能对正常业务的影响,而且把监控日志上报代码内嵌到正常业务代码中,连带业务进程一起进行部署,在管理上非常方便。除此之外还利用了原有的日志接口,使用简洁方便,用户不需要做任何调用上的改动。

本技术领域技术人员可以理解,本发明包括涉及用于执行本发明中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随即存储器)、EPROM(Erasable Programmable Read-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。

以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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