CN1492330A - 通用Windows程序运行日志信息记录方法 - Google Patents
通用Windows程序运行日志信息记录方法 Download PDFInfo
- Publication number
- CN1492330A CN1492330A CNA02146331XA CN02146331A CN1492330A CN 1492330 A CN1492330 A CN 1492330A CN A02146331X A CNA02146331X A CN A02146331XA CN 02146331 A CN02146331 A CN 02146331A CN 1492330 A CN1492330 A CN 1492330A
- Authority
- CN
- China
- Prior art keywords
- log information
- interface function
- journal information
- memory block
- raw data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种通用Windows程序运行日志信息记录方法,其步骤为:按照日志信息类型调用日志信息接口函数,由相应的日志信息接口函数将日志信息原始数据放入日志信息队列中,将日志信息数据处理通知发送至日志信息处理模块后直接返回;日志信息数据处理模块收到日志信息数据处理通知后,对日志信息队列中的日志信息进行包括保存、显示、格式化的处理。调用日志信息接口函数与日志信息数据处理分离进行,保证了日志信息的处理不会阻塞程序的正常运行,在日志信息处理中出现异常也不会影响正常流程的执行;多种类型的日志信息接口函数提供了通用灵活的日志信息记录方法;内存管理函数对内存进行高效的管理,避免因内存的频繁分配而导致的大量内存碎片。
Description
技术领域
本发明涉及程序运行日志信息记录技术领域,特别是指一种通用Windows环境下程序运行日志信息记录方法。
背景技术
运行日志信息记录是程序调试和问题定位常用的方法。一般的日志信息记录方式都是通过直接将程序要记录的字符串信息以写文件的方式来实现。这种方式如果直接应用于商用软件产品中将存在很多弊病。
首先,这种日志信息记录的方式没有将日志信息分级。在调试版本和发布版本时,如果不修改代码,则无法将调试程序时的日志信息记录清除,因此会占用很多内存空间,造成资源的浪费。
其次,在有大量日志信息记录运行的情况下,程序的运行性能将受到严重影响,甚至会导致程序正常运行的阻塞。用户总是希望调用日志信息记录能够尽快完成,但通常日志信息的处理总是非常耗时。
再次,记录日志信息需要对内存频繁地申请和释放,将产生大量的内存碎片,导致系统内存使用率降低,甚至出现无可用内存的情况。
发明内容
有鉴于此,本发明的目的在于提供一种通用Windows程序运行日志信息记录方法,实现通用、高效、灵活的运行日志信息记录。
为了达到上述目的,本发明提供了一种通用Windows程序运行日志信息记录方法,其特征在于包括以下步骤:
A、按照日志信息类型调用日志信息接口函数,由相应的日志信息接口函数将日志信息原始数据放入日志信息队列中,将日志信息数据处理通知发送至日志信息处理模块后直接返回;
B、日志信息数据处理模块收到日志信息数据处理通知后,对日志信息队列中的日志信息进行包括保存、显示、格式化的处理。
步骤A进一步包括:调用内存管理函数分配内存块存储日志信息原始数据;步骤B进一步包括:调用内存管理函数释放内存块中存储的日志信息原始数据。
内存管理函数管理内存时进一步包括:
a、向系统申请一块可用内存空间,将这段内存空间分成一个以上的小内存块;对这些小内存块进行编号,并通过设置使用标志“空闲”或“被使用”表示小内存块的使用状态;
b、记录最新分配的小内存块的编号,将日志信息原始数据存储其中,并将其使用标志由“空闲”置为“被使用”;
c、分配内存时,向最新分配的小内存块编号增长的方向搜索,找到一块使用标志为“空闲”的小内存块存储日志信息原始数据,将其使用标志由“空闲”置为“被使用”;
d、释放内存时,根据分配的小内存块编号找到需要释放日志信息原始数据的小内存块,释放日志信息原始数据后将其使用标志由“被使用”置为“空闲”。
根据日志信息原始数据的前后关系将存储日志信息原始数据的小内存块排列起来形成所述的日志信息队列。
步骤A进一步包括:设置日志信息处理级别接口函数用来确定需要处理的日志信息级别,包括致命、错误、警告、提示;日志信息处理级别接口函数判断日志信息是否为需要处理的级别,需要处理时,将该日志信息原始数据放入日志信息队列中,不需要处理时,日志信息处理级别接口函数调用结束。较佳地,日志信息接口函数包括:携带可变参数字符串日志信息接口函数、内存块日志信息接口函数、自定义帧日志信息接口函数、定制格式日志信息接口函数、设置日志信息处理级别接口函数。
步骤B的日志信息格式化处理是通过不同的日志信息接口函数实现的。
系统通过回调定制格式日志信息接口函数构造日志信息格式。
本发明通过将调用日志信息接口函数与日志信息数据处理分离进行,日志信息接口函数与日志信息数据处理模块间通过日志信息队列进行数据交换,保证了日志信息的处理不会阻塞程序的正常运行,同时保证在日志信息处理过程出现异常也不会影响正常流程的执行。多种类型的日志信息接口函数为用户提供了通用、高效、灵活的日志信息记录方法,用户可以通过定制格式日志信息接口函数构造对显示格式有特殊要求的日志信息。在将日志信息原始数据放入日志信息队列和日志信息数据处理过程中,没有使用系统的内存分配方法,而是应用内存管理函数对内存进行简单高效的管理。通过调用内存管理函数,减少了内存的分配次数,提高了空闲内存被选中的概率,避免了因内存的频繁分配而导致的大量内存碎片。
附图说明
图1示出了依据本发明的调用日志信息接口函数的流程图;
图2示出了依据本发明的日志信息数据处理过程的流程图;
图3示出了依据本发明的内存管理函数管理内存的方法示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步地详细描述。
日志信息对安全来说非常重要,它记录了系统每天发生的各种各样的事件,用户可以通过它来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。而且每个大型应用程序在开发、测试及产品化周期中都需要使用日志信息实用程序。日志信息的主要功能为审计和监测。日志信息可以实时地监测系统状态,监测到入侵者的入侵并追踪入侵者等等。
日志信息的内容主要包括:记录日志信息的时间、级别、文件名、代码行号、日志信息主体等几部分。日志信息一般分为致命、错误、警告和提示四个级别。
本发明为用户提供多种方式进行日志信息记录、显示和处理。用户可以分别定义需要存储、显示哪些级别的日志信息。在使用过程中将日志信息按照类型封装成几个日志信息接口函数,每个日志信息接口函数处理一种类型的日志信息,例如:携带可变参数字符串日志信息接口函数,内存块日志信息接口函数(将内存中某段连续地址空间的内容存储下来)、自定义帧日志信息接口函数等。因此,在需要记录不同类型日志信息或希望以不同形式记录日志信息时,只需要简单调用相应类型的日志信息接口函数即可。对于用户需要存储的某些级别的日志信息,可以调用设置日志信息处理级别接口函数来确定需要存储的日志信息。用户对日志信息的显示格式有特殊要求时,可以采用定制格式日志信息接口函数进行自由定制。
本发明通过将调用日志信息接口函数和日志信息数据处理分离进行的方法,保证日志信息的处理不会阻塞程序的正常运行,同时保证日志信息处理过程中出现的异常也不会影响正常流程的执行。
日志信息接口函数与日志信息数据处理模块间通过一个日志信息队列进行数据交换。用户在调用日志信息接口函数后,日志信息接口函数只是将日志信息的原始数据放入日志信息队列中,并将日志信息处理通知发送至日志信息数据处理模块,然后日志信息接口函数就停止运行。这样就可以保证日志信息的处理过程不会占用原有流程的时间,其中的异常也不会影响正常流程的执行。
日志信息数据处理模块在得到日志信息处理通知后,就从日志信息队列中取出日志信息原始数据进行处理,构造可读性强的日志信息。日志信息数据处理模块对日志信息原始数据的处理包括格式化、存储、显示等。调用设置日志信息处理级别接口函数来确定需要存储的日志信息,根据用户的设置将日志信息存储到日志信息文件中,或显示在指定的窗口中,或根据用户定制的方式进行处理。格式化是指将数据构造成需要的格式,如将十六进制的数据转换成十进制的数据。
图1示出了依据本发明的调用日志信息接口函数的流程图,如图1所示:
步骤101~步骤102:用户依据日志信息类型调用相应类型的日志信息接口函数,日志信息接口函数接收日志信息原始数据。该类型的日志信息接口函数根据日志信息的级别和设置日志信息处理级别接口函数判断该日志信息原始数据是否需要处理,如果需要处理,执行步骤103;如果不需要处理,执行步骤106。
步骤103~步骤105:日志信息接口函数调用内存管理函数,内存管理函数为日志信息原始数据分配内存存储空间。日志信息接口函数将日志信息原始数据放入日志信息队列中,并将日志信息处理通知发送至日志信息数据处理模块。
步骤106:日志信息接口函数调用结束。
图2示出了依据本发明的日志信息数据处理过程的流程图,如图2所示:
步骤201~步骤203:日志信息数据处理模块收到日志信息接口函数发送的日志信息处理通知后,对日志信息原始数据进行处理,构造可读性强的日志信息,然后存储、显示日志信息。
步骤204~步骤205:日志信息原始数据处理完毕,日志信息数据处理模块调用内存管理函数,内存管理函数释放存储日志信息原始数据的内存块。日志信息数据处理模块运行完毕。
步骤101~步骤106为调用日志信息接口函数的过程,步骤201~步骤205为日志信息数据处理的过程,两个过程是分离进行的,这样就可以保证日志信息的处理过程不会占用原有流程的时间,其中的异常也不会影响正常流程的执行。
在对调用日志信息接口函数和日志信息数据处理过程的描述中,提到了内存管理函数。本发明中没有采用系统分配内存的方法,而是采用内存管理函数进行自己的内存管理。
内存管理函数向系统申请一块可用内存,并将其分成若干小内存块,对每个小内存块进行编号,并设置“空闲”和“被使用”的使用标志。在需要使用内存时,则从这些小内存块中找到一块使用标志为“空闲”的小内存块存储日志信息原始数据,将其使用标志由“空闲”置为“被使用”。
在整个内存管理过程中,将最新分配的小内存块的编号记录下来。分配内存时,从该位置编号向后搜索,找到一块使用标志为“空闲”的小内存块,将日志信息原始数据存储其中,并将其使用标志置为“被使用”。而释放内存时,则根据小内存块的编号,找到要释放的小内存块的编号,将其存储的内容释放,然后将其使用标志置为“空闲”。
图3示出了依据本发明的内存管理函数管理内存的方法示意图,如图3所示:
内存管理函数向系统申请一块可用内存301,将内存301分成N个小内存块,对这N个小内存块进行编号,从第一个小内存块302编号0至第N个小内存块304编号N-1。在最初将每个小内存块的使用标志都置为“空闲”。在需要使用内存时,从内存301的小内存块中找到一块使用标志为“空闲”的小内存块存储内容,将其使用标志由“空闲”置为“被使用”。
若小内存块303为最新分配的小内存块,内存管理函数记录小内存块303的编号,并将小内存块303的使用标志由“空闲”置为“被使用”。分配内存时,向最新分配的小内存块编号增长的方向搜索,即沿箭头306的方向进行搜索,找到一块使用标志为“空闲”的小内存块,将日志信息原始数据存储其中,并将其使用标志置为“被使用”。内存释放时,根据分配的小内存块编号找到需要释放日志信息原始数据的小内存块,释放完毕,将其使用标志由“被使用”置为“空闲”。
这种内存管理方法对内存进行了简单高效的管理,可保证在需要分配内存时能够很快命中空闲内存块;而在释放内存时,也能很快找到需要释放内容的小内存块的位置。这样大大减少了内存的分配次数,同时保证了空闲内存被选中的概率。通过这种方式避免了因内存的频繁分配而导致的大量内存碎片。
对于想定制日志信息格式的用户,本发明中也提供了灵活的定制格式日志信息接口函数,通过回调定制格式日志信息接口函数的形式来构造符合用户要求的特殊的信息。所谓回调函数就是用户自己编写符合要求的函数,系统调用这个函数后,构造出满足用户需求的格式。如:
W2L(BYTE byLevel,PVOID pData,MAKESTRPROC MakeStrProc)
其中pData是需要处理的日志信息原始数据结构;
MakeStrProc是构造日志信息自定义格式的函数的指针。
如果用户调用上面的定制格式日志信息接口函数来记录日志信息,则在实际处理日志信息原始数据时,日志信息数据处理模块会将日志信息原始数据pData交给MakeStrProG处理,最后将处理结果存储并显示。
用户通过定制格式日志信息接口函数构造符合自己需求的日志信息,定制格式日志信息接口函数为用户提供了灵活的操作,保证日志信息接口函数具有高度的可扩展性。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (8)
1、一种通用Windows程序运行日志信息记录方法,其特征在于包括以下步骤:
A、按照日志信息类型调用日志信息接口函数,由相应的日志信息接口函数将日志信息原始数据放入日志信息队列中,将日志信息数据处理通知发送至日志信息处理模块后直接返回;
B、日志信息数据处理模块收到日志信息数据处理通知后,对日志信息队列中的日志信息进行包括保存、显示、格式化的处理。
2、如权利要求1所述的通用Windows程序运行日志信息记录方法,其特征在于所述的步骤A进一步包括:调用内存管理函数分配内存块存储日志信息原始数据;步骤B进一步包括:调用内存管理函数释放内存块中存储的日志信息原始数据。
3、如权利要求2所述的通用Windows程序运行日志信息记录方法,其特征在于所述的内存管理函数管理内存时进一步包括:
a、向系统申请一块可用内存空间,将这段内存空间分成一个以上的小内存块;对这些小内存块进行编号,并通过设置使用标志“空闲”或“被使用”表示小内存块的使用状态;
b、记录最新分配的小内存块的编号,将日志信息原始数据存储其中,并将其使用标志由“空闲”置为“被使用”;
c、分配内存时,向最新分配的小内存块编号增长的方向搜索,找到一块使用标志为“空闲”的小内存块存储日志信息原始数据,将其使用标志由“空闲”置为“被使用”;
d、释放内存时,根据分配的小内存块编号找到需要释放日志信息原始数据的小内存块,释放日志信息原始数据后将其使用标志由“被使用”置为“空闲”。
4、如权利要求3所述的通用Windows程序运行日志信息记录方法,其特征在于:根据日志信息原始数据的前后关系将存储日志信息原始数据的小内存块排列起来形成所述的日志信息队列。
5、如权利要求1所述的通用Windows程序运行日志信息记录方法,其特征在于所述的步骤A进一步包括:设置日志信息处理级别接口函数用来确定需要处理的日志信息级别,包括致命、错误、警告、提示;日志信息处理级别接口函数判断日志信息是否为需要处理处理的级别,需要处理时,将该日志信息原始数据放入日志信息队列中,不需要处理时,日志信息处理级别接口函数调用结束。
6、如权利要求1所述的通用Windows程序运行日志信息记录方法,其特征在于所述的日志信息接口函数包括:携带可变参数字符串日志信息接口函数、内存块日志信息接口函数、自定义帧日志信息接口函数、定制格式日志信息接口函数、设置日志信息处理级别接口函数。
7、如权利要求1所述的通用Windows程序运行日志信息记录方法,其特征在于:所述步骤B的日志信息格式化处理是通过不同的日志信息接口函数实现的。
8、如权利要求1所述的通用Windows程序运行日志信息记录方法,其特征在于:系统通过回调定制格式日志信息接口函数构造日志信息格式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB02146331XA CN1295613C (zh) | 2002-10-24 | 2002-10-24 | 通用Windows程序运行日志信息记录方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB02146331XA CN1295613C (zh) | 2002-10-24 | 2002-10-24 | 通用Windows程序运行日志信息记录方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1492330A true CN1492330A (zh) | 2004-04-28 |
CN1295613C CN1295613C (zh) | 2007-01-17 |
Family
ID=34232687
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB02146331XA Expired - Fee Related CN1295613C (zh) | 2002-10-24 | 2002-10-24 | 通用Windows程序运行日志信息记录方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1295613C (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1315041C (zh) * | 2004-12-29 | 2007-05-09 | 华为技术有限公司 | 一种提高程序运行信息可理解性的实现方法及系统 |
CN100432987C (zh) * | 2004-09-29 | 2008-11-12 | 佳能株式会社 | 信息处理装置、履历文件作成方法和程序 |
CN101369250B (zh) * | 2008-10-08 | 2010-09-29 | 上海闻泰电子科技有限公司 | 一种基于Shell的带日志执行方法 |
CN101119279B (zh) * | 2006-07-31 | 2012-05-23 | 国际商业机器公司 | 操作计算系统的方法和系统 |
CN102681931A (zh) * | 2012-05-15 | 2012-09-19 | 天津市天元新泰科技发展有限公司 | 一种日志和异常探针的实现方法 |
CN102981943A (zh) * | 2012-10-29 | 2013-03-20 | 新浪技术(中国)有限公司 | 监控应用日志的方法及系统 |
CN103942150A (zh) * | 2014-04-01 | 2014-07-23 | 上海网达软件股份有限公司 | 一种用于实时流媒体传输系统的内存管理方法 |
CN105260315A (zh) * | 2015-11-13 | 2016-01-20 | 上海斐讯数据通信技术有限公司 | 一种在嵌入式系统进程中调试日志的方法 |
CN106529679A (zh) * | 2016-10-14 | 2017-03-22 | 腾讯科技(上海)有限公司 | 一种机器学习方法及系统 |
CN113656358A (zh) * | 2020-05-12 | 2021-11-16 | 网联清算有限公司 | 一种数据库日志文件处理方法及系统 |
CN115048046A (zh) * | 2022-05-26 | 2022-09-13 | 北京华昱卓程软件有限公司 | 日志文件系统以及数据管理方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216800B (zh) * | 2008-01-02 | 2010-12-29 | 中兴通讯股份有限公司 | 一种linux日志的管理装置及方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1159649C (zh) * | 2000-12-28 | 2004-07-28 | 中兴通讯股份有限公司 | 一种日志信息的自动循环存储方法 |
US6832229B2 (en) * | 2001-03-09 | 2004-12-14 | Oracle International Corporation | System and method for maintaining large-grained database concurrency with a log monitor incorporating dynamically redefinable business logic |
-
2002
- 2002-10-24 CN CNB02146331XA patent/CN1295613C/zh not_active Expired - Fee Related
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100432987C (zh) * | 2004-09-29 | 2008-11-12 | 佳能株式会社 | 信息处理装置、履历文件作成方法和程序 |
US7860892B2 (en) | 2004-09-29 | 2010-12-28 | Canon Kabushiki Kaisha | Information processing apparatus, history file generation method and program |
CN1315041C (zh) * | 2004-12-29 | 2007-05-09 | 华为技术有限公司 | 一种提高程序运行信息可理解性的实现方法及系统 |
CN101119279B (zh) * | 2006-07-31 | 2012-05-23 | 国际商业机器公司 | 操作计算系统的方法和系统 |
CN101369250B (zh) * | 2008-10-08 | 2010-09-29 | 上海闻泰电子科技有限公司 | 一种基于Shell的带日志执行方法 |
CN102681931A (zh) * | 2012-05-15 | 2012-09-19 | 天津市天元新泰科技发展有限公司 | 一种日志和异常探针的实现方法 |
CN102981943A (zh) * | 2012-10-29 | 2013-03-20 | 新浪技术(中国)有限公司 | 监控应用日志的方法及系统 |
CN102981943B (zh) * | 2012-10-29 | 2016-05-11 | 新浪技术(中国)有限公司 | 监控应用日志的方法及系统 |
CN103942150A (zh) * | 2014-04-01 | 2014-07-23 | 上海网达软件股份有限公司 | 一种用于实时流媒体传输系统的内存管理方法 |
CN105260315A (zh) * | 2015-11-13 | 2016-01-20 | 上海斐讯数据通信技术有限公司 | 一种在嵌入式系统进程中调试日志的方法 |
CN105260315B (zh) * | 2015-11-13 | 2018-04-06 | 上海斐讯数据通信技术有限公司 | 一种在嵌入式系统进程中调试日志的方法 |
CN106529679A (zh) * | 2016-10-14 | 2017-03-22 | 腾讯科技(上海)有限公司 | 一种机器学习方法及系统 |
CN106529679B (zh) * | 2016-10-14 | 2020-01-14 | 腾讯科技(上海)有限公司 | 一种机器学习方法及系统 |
CN113656358A (zh) * | 2020-05-12 | 2021-11-16 | 网联清算有限公司 | 一种数据库日志文件处理方法及系统 |
CN115048046A (zh) * | 2022-05-26 | 2022-09-13 | 北京华昱卓程软件有限公司 | 日志文件系统以及数据管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1295613C (zh) | 2007-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1295613C (zh) | 通用Windows程序运行日志信息记录方法 | |
CN1801106A (zh) | 用于计算机系统中的多个分区的错误监视的方法 | |
US7882223B2 (en) | System and method for saving dump data of a client in a network | |
CN1604051A (zh) | 用于通过面向对象的程序执行动态内存管理的方法和设备 | |
CN100343826C (zh) | 一种实现内存管理的方法 | |
US20190171625A1 (en) | Quality score compression for improving downstream genotyping accuracy | |
CN1967539A (zh) | 用于监控和调试查询执行对象的装置和方法 | |
CN1267026A (zh) | 允许服务器远程访问计算机系统资产信息的系统和方法 | |
CN1928873A (zh) | 一种实现负荷分担的数据库访问方法及系统 | |
CN102541925A (zh) | 一种实现详细话单的快速存储和检索的方法及装置 | |
CN1821978A (zh) | 在嵌入系统的非易失存储器中进行数据操作的方法 | |
CN1532708A (zh) | 一种静态内存管理方法 | |
CN1862482A (zh) | 一种先入先出存储器及其输出空满标志的方法 | |
US20060161913A1 (en) | Method and apparatus for marking code for data versioning | |
US7890934B2 (en) | System and method for performance monitoring | |
CN1851676A (zh) | 一种嵌入式系统缓冲式内存分配方法 | |
CN100489855C (zh) | 使用最少的日志条目将数据库更改记入日志的设备和方法 | |
CN111181819A (zh) | 一种基于链表结构的接收多字节数据帧的串口通讯方法 | |
CN1881895A (zh) | 一种网络管理系统中的设备操作方法 | |
CN1904846A (zh) | 一种配置恢复装置和方法 | |
CN1324481C (zh) | 一种用于网络处理器的数据老化方法 | |
CN1975701A (zh) | 主机驱动外设的方法及系统 | |
CN1203410C (zh) | 用于在寄存器栈和存储器资源之间传送数据的方法和设备 | |
CN100487657C (zh) | 嵌入式系统中自动监测内存泄漏与内存越界的方法 | |
CN101068244A (zh) | 一种追踪协议栈状态机切换的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070117 Termination date: 20131024 |