应用程序日志记录方法及系统的制作方法

文档序号:6369874阅读:354来源:国知局
专利名称:应用程序日志记录方法及系统的制作方法
技术领域
本发明涉及服务类型应用程序的维护技术,特别涉及一种应用程序日志记录方法及系统。
背景技术
在一个服务类型的应用程序中,详细而及时的日志记录是相当重要的,因为系统长时间处于无人守护状态,在出现问题时,当时的日志记录很有可能就是唯一的跟踪定位问题的依据和线索,特别是对于一个在客户现场运行的大型系统来说,日志更显重要。
目前的服务类型的应用程序都具备日志记录功能,普遍采用的方法就是写文件,即每写一次日志的过程就是打开文件、写文件、关闭文件的过程。
在现有的PC系统中,磁盘I/O操作是一个瓶颈,而频繁的写文件操作将会耗去很大部分的CPU资源。特别是在电信系统的软件系统当中,由于是电信级应用,可能会同时并发处理上百个呼叫,系统正常运行时会有多达几百个线程,这就意味着同时可能有几百个写日志的操作发生,每写一次日志的过程就是打开文件、写文件、关闭文件的过程。系统为了能够跟踪到各个通道的工作情况,每个线程都会很频繁的记录日志,同时为了对日志信息进行区分,不同通道不同类型的信息都保存在不同的日志文件当中。在系统用户达到设计上限时,系统的CPU占用率达到90%以上,而其中记录日志占用的CPU时间就在50%以上。由此可见,服务系统产生的日志量相当大,并且是在客户现场运行,其结果是在真正的运行期间,应用程序往往无法启动日志记录功能,这样日志的意义也就丧失了。因此上述的日志记录方法虽然简单,但致使系统短时间内生成大批的日志,进而严重影响应用程序的性能。

发明内容
针对现有技术的缺点,本发明提供一种应用程序日志记录方法,该方法能极大的降低磁盘I/O的操作,降低对CPU资源的占用率。
本发明的另一目的在于提供一种日志服务系统。
本发明的方法包括步骤A、将应用程序产生的日志内容写入一共享内存区;B、将该共享内存区的日志内容写入到指定的日志文件中。
根据上述方法步骤B包括步骤B1、将共享存储区的日志内容读出至一缓冲区;B2、根据缓冲区中已存储日志内容的容量或者定时地将缓冲区中的日志内容写入到指定的日志文件中。
将日志内容写入共享存储区和从该共享存储区读取日志内容通过互斥锁实现同步。
定时对共享存储区进行扫描,以发现该共享存储区是否有新的日志内容,如有则将其读出至缓冲区。
当缓冲区的日志内容容量小于所述的一预定值且客户服务端已停止写日志时,将日志内容写入日志文件。
所述的共享存储区和缓冲区采用环状存储区的方式,即写完存储区末尾的存储单元后指针将指向该存储区的首地址单元。
一种日志服务系统,至少具有包括处理器和存储器的应用服务器,该应用服务器还包括向产生日志信息的应用程序模块提供接口来将日志信息写入一共享内存区的客户端模块;将共享内存区的日志信息读出并写入指定日志文件的服务端模块;
存储日志信息的日志文件模块;以及对所述日志文件的内容进行管理的日志管理器模块。
一种日志服务系统,具有包括处理器和存储器的应用服务器和文件服务器,该应用文件服务器还包括向应用程序模块提供接口以便将所述日志信息写入一共享内存区的客户端模块;将共享内存区的日志信息读出并写入文件服务器中的服务端模块;所述文件服务器还包括存储日志信息的日志文件模块;以及对所述日志文件的内容进行管理的日志管理器模块。
本发明利用进程间通讯技术将原来频繁的磁盘I/O操作大大降低,达到既能进行日志的详细记录,又能保持较低的资源占用率,为服务类型的应用程序提供了一个完善的日志解决方案。实际运行过程中,日志系统对CPU占用基本可以忽略,解决了该应用程序长期以来由于日志记录导致CPU占用较高的问题,有效提高了系统的可维护性及稳定性。


图1为本发明的系统结构示意图;图2为应用服务器的结构示意图;图3为本发明的原理图示意图。
具体实施例方式
参考图1,本发明的系统包括文件服务器和与该文件服务器连接的应用服务器。应用服务器和文件服务器为包括处理器和存储器等部件的计算机装置。应用服务器产生日志信息,文件服务器保存日志,并可运行日志管理器对日志进行查询管理。对于日志信息量不大的系统,也可不用文件服务器,而将日志信息直接保存于应用服务器上。
参阅图2所示,应用服务器除了包括处理器和存储器等构成计算机装置的部件外(图中未示出),还包括客户端模块和服务端模块。在没有专门的文件服务器时,应用服务器还包括日志管理器模块和日志文件。
应用程序模块用于执行应用任务并产生日志信息;客户端模块向应用程序模块提供接口以便将产生的日志信息写入一共享内存区;服务端模块将共享内存区的日志信息读出并写入应用服务器或文件服务器中指定日志文件;日志管理器模块对日志文件的内容进行查看和拆分。日志客户端和服务端采用C/S结构。
参阅图3,日志客户端以动态库的形式提供接口给应用程序写入日志信息,而日志服务端负责将日志信息写入到指定的日志文件,客户端和服务端之间通过一块共享内存实现应用程序进程与日志服务进程之间的消息传递。
日志客户端采用动态库的形式向用户应用程序提供写日志信息的接口。用户需要加入日志功能或者需要对原有的日志记录方式进行修改时,应将客户端提供的接口函数嵌入到应用程序中去。主要完成的工作有(1)初始化获取共享内存的操作权;(2)写入日志信息将日志信息按用户自定义的格式写入共享内存;(3)退出清空服务器端对该客户联接的一些记录。
日志服务端是一个独立运行的后台进程。启动时,它将建立一个命名的共享内存区,并且不断扫描该共享内存区,看是否有日志信息可以读取。
日志服务端运行后进行的主要工作有(1)创建命名共享内存;(2)以多线程的方式扫描共享内存,查看是否有数据可以读取;(3)将共享内存中的数据写入日志缓冲区;(4)将缓冲区中的数据写到指定日志文件中,日志文件格式如下20020506080102_1.log,日志文件个数可由用户指定,并采用循环覆盖的方式应用程序通过通过调用日志客户端的接口,将日志内容写入服务端所创建的共享内存区。日志服务器监视到共享内存有数据则将内容暂时写到缓冲区,之后写到指定的文件中。共享内存和缓冲区都采用环状缓冲区的方式实现。生成的日志文件还可以利用用户界面进行浏览和拆分(拆分原则为将不同的模块拆成不同的目录,不同的通道生成不同的文件)。
由于在同一台应用服务器上可能有不同的应用程序使用日志工具,为了达到同步,采用互斥锁对共享内存区进行保护,即客户端将日志内容写入共享内存和服务端从共享内存读取数据是通过共享内存互斥锁来实现同步的。
在本发明中,日志管理器其实是一个查看日志文件内容的查看工具(可运行在应用服务器和文件服务器上)。该工具提供友好的用户界面,通过用户界面查看日志工具生成的日志文件内容。日志管理器还能进行日志的拆分,拆分后的日志文件与VP台原有的日志文件相同。
另外能够通过模块的添加和删除配置,适用于不同系统记录日志信息格式上的差异。
以下是应用程序写日志的一次主要过程(1)应用程序先调用日志客户端的初始化函数LogInit,进行一些必要的初始化操作(每个客户端只需初始化一次)。
(2)在写日志时,应用程序调用客户端提供的WriteLotToSHM函数将日志信息写入服务端开辟的共享内存中,不同的客户端在写日志时,通过获取一个共享内存区的互斥锁达到同步,每个客户端最多等待50ms的时间。当待写的日志信息长度要超过该共享内存区时,写共享内存的指针将指向该内存区的开始处,即从头开始写日志信息,实现循环写入。
(3)服务端每50ms扫描一次共享内存区,看是否存在日志信息,存在日志信息则将其拷贝到缓冲区中,当缓冲区中的日志信息积累到0.2MB时,服务端通过事件通知另一个写文件的线程,该线程负责将缓冲区中的内容写入日志文件,对于缓冲区中不足0.2MB而客户端已经停止写日志时,服务端将在3秒钟之后将剩余内容写入到文件。
本发明利用进程间通讯技术,将应用程序产生的日志先写入一共享内存,然后定时或定量的将该内存中的日志信息进行一次磁盘I/O操作,解决了原来每个应用程序一产生日志就进行一次磁盘I/O操作的问题,从而可大大降低磁盘I/O操作的频率,达到既能进行日志的详细记录,又能保持较低的资源占用率。
权利要求
1.一种应用程序日志记录方法,其特征在于该方法包括步骤A、将应用程序产生的日志内容写入一共享内存区;B、将该共享内存区的日志内容写入到指定的日志文件中。
2.如权利要求1所述的方法,其特征在于步骤B包括步骤B1、将共享存储区的日志内容读出至一缓冲区;B2、根据缓冲区中已存储日志内容的容量或者定时地将缓冲区中的日志内容写入到指定的日志文件中。
3.如权利要求1或2所述的方法,其特征在于将日志内容写入共享存储区和从该共享存储区读取日志内容通过互斥锁实现同步。
4.如权利要求2所述的方法,其特征在于定时对共享存储区进行扫描,以发现该共享存储区是否有新的日志内容,如有则将其读出至缓冲区。
5.如权利要求2或4所述的方法,其特征在于当缓冲区的日志内容容量小于所述的一预定值且客户服务端已停止写日志时,将日志内容写入日志文件。
6.如权利要求1、2或4所述的方法,其特征在于所述的共享存储区和缓冲区采用环状存储区的方式,即写完存储区末尾的存储单元后指针将指向该存储区的首地址单元。
7.如权利要求1所述的方法,其特征在于步骤A中,通过调用日志客户端接口将日志内容写入共享内存区;步骤B中,由日志服务端将共享存储区的日志内容写入到指定的日志文件中;所述日志客户端和日志服务端采用客户/服务器结构。
8.如权利要求7所述的方法,其特征在于共享内存区由所述日志服务端预先建立。
9.如权利要求1所述的方法,其特征在于通过日志管理器对所述日志文件的内容进行查看和拆分。
10.一种日志服务系统,具有包括处理器和存储器的应用服务器,其特征在于所述应用服务器还包括向产生日志信息的应用程序模块提供接口来将日志信息写入一共享内存区的客户端模块;将共享内存区的日志信息读出并写入指定日志文件的服务端模块;存储日志信息的日志文件模块;以及对所述日志文件的内容进行管理的日志管理器模块。
11.一种日志服务系统,具有包括处理器和存储器的应用服务器和文件服务器,其特征在于所述应用文件服务器还包括向应用程序模块提供接口以便将所述日志信息写入一共享内存区的客户端模块;将共享内存区的日志信息读出并写入文件服务器中的服务端模块;所述文件服务器还包括存储日志信息的日志文件模块;以及对所述日志文件的内容进行管理的日志管理器模块。
全文摘要
本发明公开了一种应用程序日志记录方法,该方法是将应用程序产生的日志内容写入一共享内存区;然后将该共享内存区的日志内容写入到指定的日志文件中。本发明还公开了一种日志服务系统。本发明利用进程间通讯技术将原来频繁的磁盘I/O操作大大降低,达到既能进行日志的详细记录,又能保持较低的资源占用率,为服务类型的应用程序提供了一个完善的日志解决方案。
文档编号G06F12/06GK1567248SQ0314555
公开日2005年1月19日 申请日期2003年7月1日 优先权日2003年7月1日
发明者江周平, 吴燕宇, 游崇 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1