资源描述
本科毕业设计(论文)
摘要
本论文通过对市场上现有的日志分析工具的研究与分析,描述了日志动态分析系统在MFC设计框架和面向对象的思想的基础上的设计与实现过程。相对于其它的日志分析工具,该系统加入了更为人性化的设置,除能对日志文件进行简单的分析外,分析规则可根据不同的需求进行设置更改,从用户的角度极大地改善了传统的日志分析工具。
本文介绍了实现该系统软件所需要的环境配置以及所运用的开发工具Visual C++6.0,介绍了MFC框架的基本概念,分析了日志分析系统的工作原理以及介绍了各个模块功能的分析设计与实现。
关键词:Windows应用程序 VC++语言 MFC框架 面向对象 日志分析
ABSTRACT
With the research and analysis of the log analysis tools in the market, this thesis describes the designing and implementing processes of the log dynamic analysis system which based on the MFC framework and the object-oriented thinking. Compared to other log analysis tools, this system is added more human settings. For example, it not only has the function of the log file simple analysis, but also can change the settings of the analysis rules with the different requirements. From the perspective of users, it has greatly improved the traditional log analysis tools.
This thesis introduces the required environment and the development tools – Visual C++6.0 for implementing the log dynamic analysis system at first, and then introduces the basic concepts of the MFC framework, also analyses the work principle of the system and introduces the analysis, design and implementation of each modules functions.
Keywords: Windows applications;VC++;MFC;OO;Log analysis
目录
摘要 I
ABSTRACT III
第1章 引言 - 1 -
1.1 背景 - 1 -
1.2 研究内容 - 2 -
第2章 开发技术、工具介绍 - 3 -
2.1 Visual C++简介 - 3 -
2.2 Visual C++功能特点 - 4 -
2.3 MFC框架 - 4 -
2.4日志文件介绍 - 5 -
2.4.1日志文件 - 5 -
2.4.2日志文件格式 - 6 -
第3章 日志动态分析系统设计 - 9 -
3.1 系统需求分析 - 9 -
3.1.1 系统概要: - 9 -
3.1.2 系统功能一览表 - 10 -
3.2 系统设计 - 10 -
3.2.1 软件界面的基本功能: - 12 -
3.2.2 软件主要功能的设计: - 12 -
3.2.3模块的难点 - 14 -
第4章 日志动态分析系统实现 - 15 -
4.1 整体效果 - 15 -
4.2 实现过程 - 20 -
4.2.1 时序图生成子系统的实现 - 20 -
4.2.2 条件定义子系统的实现 - 24 -
4.2.3 日志抽出子系统的实现 - 25 -
第5章 系统测试 - 27 -
5.1 系统测试的意义及目的 - 27 -
5.2 本系统的测试过程 - 28 -
第6章 结论 - 30 -
致谢 - 31 -
参考文献 - 32 -
附录: - 33 -
IV
第1章 引言
1.1 背景
每一个应用程序或操作系统,对其操作时都会产生一个日志文件,这个日志文件记录了每一个操作系统或应用软件所作的所有事情,以便管理人员对程序或系统进行管理及操作。但日志文件非常庞大,很多没有用的信息会将重要的信息淹没,给用户分析日志带来了很大的不便,因此日志分析的重要性也已经越来越受到大家的重视。而日志分析系统,就是应用于从庞大的日志文件里方便的找出其中的规律,并代替管理人员做繁琐庞大的日志分析工作以及自动生成简单易懂的图表形式文件的计算机系统和应用软件[1]。
在当前市场里,针对不同的日志文件,会有配套的日志分析软件,例如:windows日志分析软件,apache日志分析软件,防火墙日志分析软件,网络日志分析软件,服务器日志分析软件, web日志分析软件等等。由于没有一种软件有能力分析所有的日志文件,而每个用户的要求也是不一样的,甚至可能对同一种日志文件,两个不同的用户所需要的分析工具却是不同的,也正是基于这个原因,对于日志分析工具的开发从没有停滞过[5]。
日志统计系统在站点的用户行为分析中扮演了重要的角色,尤其是对于来自搜索引擎的关键词访问统计,是很有效的用户行为分析数据来源。随着互联网多年的发展,WEB日志统计工具已经越来越成熟,功能也越来越丰富。
以 Webtrends为例,它是Netiq公司的网站访问统计软件,可以说是业界日志分析软件的工业标准。Webtrends 7.0 已经不单纯是一款提供日志分析统计数据的软件,除了最常见的日志分析功能外,其可以对数据进行深度挖掘,更重视网站运营、市场营销等对运营人员更容易理解的方式提供解决方案,可以进一步对用户的访问行为、访问流向、设定用户场景分析、网络营销推广活动、用户访问来源、内容访问等进行分析,对网站业务运营能够提供比较全面支持分析。
/ p, n2 c/ @" h A1 D- ~0 GWebTrends的搜索分析与其推出的WebPosition搜索引擎优化解决方案的集成,及时扩充、增强了对Web的分析能力。 WebTrends SmartReports针对Microsoft、Excel而开发,市场营销人员通过其提供的定制化分析报告,就可将组织机构与付费搜索定位、营销额与 ROI(市场投资回报率)之间的关系量化,进而帮助他们将目光聚焦在最有利可图的搜索定位上[1]。
从安全角度看,日志分析系统通过对每天的日志的分析,不但实现了系统运行安全报警,也为系统的提升起到了绝对作用。从经济角度看,日志分析系统不但减少了因系统安全维护造成的成本支出,而且还促进了整个市场的发展。另一方面,没有日志分析系统,管理人员就不可能从庞大的日志文件里方便地找出其中的规律,也就无从去设计查询缓存。可见,日志分析系统和日志文件本身有着同样的存在意义。
1.2 研究内容
此次设计是在MFC设计框架和面向对象的思想的基础上设计与实现了日志动态分析系统,以帮助工作人员快速地进行日志文件分析,大大节省了在日志文件上花去的时间,从而将更多地精力放在重要的工作上。
该系统设计工程小组由3人组成,工程大致分为以下6个模块:
1、 基于日志分析的时序图设计和生成,和时序图生成的相关设置。 ―――时序图生成子系统
2、 日志文件中字段定义的语法设计及实现和语法检查(项目定义和项目定义的check实行)―――语法检查子系统
3、 复杂抽出条件的定义和GRID 控件的使用 ―――条件定义子系统
4、 根据设定的抽出条件,对特定内容抽出的实现(简单抽出,复杂抽出,抽出解除,经过时间计算)―――日志抽出子系统
5、 根据日志文件字段的语法定义,对日志文件分析,并对各个字段以不同的颜色、字体显示,和颜色的设定。(颜色、字体设定,和显示,日志文件分析)―――日志标识子系统
6、日志文件比较和检索(打开多个文件的实现,2个日志不同点的比较,动态切分,search, 定位到某行,经过时间计算,行号显示) ―――日志比较子系统
其中本人担当的模块有:时序图生成子系统,条件定义子系统,以及日志抽出子系统。由于此次设计是根据日方客户的软件需求作成的,相当于一个软件外包的项目,因此该系统是基于日文版的操作系统。
第2章 开发技术、工具介绍
2.1 Visual C++简介
Visual C++是美国Microsoft公司推出的4GL软件开发工具,目前已成为国内应用最广泛的高级程序设计语言之一,最新版本为6.0版。同其他软件开发工具相比,Visual C++具有面向对象、可视化开发、良好的封闭性等众多优点,但是Visual C++并不是把所有的编程工作都做好了,只等着让程序员来用它,这也正是它最吸引程序员的地方,它把一些基础性工作都作好,为程序员提供一个良好环境,程序员可以在它的基础上开发出自己的应用程序,以满足程序员各种要求[9]。
VC++是Windows平台上的C++编程环境,换句话说就是Visual Studio开发工具箱中的一个C++程序开发包。学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。VC++应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势,而本次设计正是基于MFC框架来设计与实现的[2]。
VC使用的语言是C++。C++是一门高效实用的程序设计语言,它即可以进行过程化程序设计,也可以进行面向对象程序设计。C++语言强调对高级抽象的支持。C++渐渐成为ANSI标准,这种新的面向对象程序设计语言迅速成为了程序员最广泛使用的工具。C++从C进化二来,是C语言的超集。C++在程序结构的本质与C是一致的,都是用函数驱动机制实现。纵观当前,C++的发展领导了程序设计语言的潮流,大都取代其他程序语言之趋势。在教学上,它以其他面向对象的特征和严密的类型而正悄无声息地取代了PASCAL;在科学计算功能上,它比Fortran更为可靠和方便;在系统软件地研究开发上,它又是上选地语种;在小规模控制应用上,C++的效率比之C毫无逊色;在大规模应用软件开发上,以Windows环境为代表的C++类库以及组件(组合类库)在迅速发展,它的触角触及各个领域[7]。
2.2 Visual C++功能特点
几乎所有世界级的软件,从业界领先的Web浏览器到面向任务的企业应用,都是使用Microsoft Visual C++开发系统来开发的。要用C++来开发Windows和Web上的高性能应用程序,Visual C++是效率最高的首选工具。Visual C++ 6.0在不牺牲灵活性、性能和控制力度的同时,给C++带来更高水平的生产效率。除了IntelliSense Technology(智能感应技术)和Edit and Continue(即编即调)等显著缩短开发时间的新特性外,Visual C++ 6.0还为Web开发和企业开发提供更良好的支持。有了这些显著缩短开发时间的新特性,编码所费的时间减少了,编译所费的时间减少了,调试所费的时间也减少了,创建应用程序所费的时间减少了,同时还可以享受到更多的构件重用[2]。
另外VC++6.0还有以下功能上的特点:
1.可自定义工具条和菜单:可以灵活地定制菜单和工具条,使其更适合你的工作需要。比如,可以创建一个新的工具条和菜单;增加、删除菜单命令和工具条按钮等。
2.支持多个项目工作区:一个新的便捷的项目系统允许一个工作区内包含多个不同的项目类型。比如说,可以创建一个包含Visual C++工程和J++ Applet的工作区。
3.一次修改多个项的值:在使用加速键、对话框、菜单、字符串时,如果需要对多个项作同一修改,可以选择所有要改的项目,然后在“View”菜单中点“Properties”;在“Properties”对话框中一次完成多项值更改。
4.增强的调试器功能:可以直接运行和调试程序,并用宏语言自动进行调试工作。
5.资源的直接拖放操作:这可能是令许多程序员倍感欣慰的一个特性,因为这一特性对于在不同工程之间复制代码和资源是非常方便的。工程之间还支持鼠标直接拖放对象特性,这样用户可以直接从一个工程的资源文件中拖动一个对话框资源,然后放到另一个工程的资源文件中。而在以前版本中要完成类似的操作,必需先打开一个工程,然后打开另一个工程的资源文件,再进行资源复制操作[5]。
2.3 MFC框架
MFC是Microsoft Foundation Class(微软基础类)的缩写。从物理角度看,它是一个庞大的类库、包含可控制计算机系统方方面面的类库,它对应的是Window系统目录下的一系列mfc*.dll文件;从逻辑角度看,它是一个面向对象的应用程序框架,程序员可以使用这一框架创建Windows应用程序。MFC的组织是以C++类的层次形式组织在一起的,几个高层类提供一般功能,而低层类实现更具体的功能,每一个底层类都从高层类派生而来,因此继承了高层类的功能[11]。
除了类的层次外,MFC也提供了一个应用程序开发框架,此框架被称为文档/视图架构。文档/视图架构是将应用程序所需数据的处理与显示相分离的一种编程模式,该框架允许这两部分独立存在,当修改其中一部分的时候,不会大量改动另一部分[6]。
MFC将类、类的继承、动态约束、类的关系和相互作用等应用程序概念封装起来,可以使开发者高效、轻松地建立Windows应用程序,而不受设备限制并且由时间进行驱动。MFC具有良好的通用性和可移植性,它定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的工作就是通过VC所提供的各种工具来完成这个工作[8]。
MFC是一个包含了超过200个不同类的庞大的类库。利用它们,开发者可以完成许多标准的Windows编程任务,并且可以在应用程序中加入许多复杂的特性,如生成个个性化的菜单、工具栏和状态栏,对各种数据库进行操作。
2.4日志文件介绍
2.4.1日志文件
日志文件是存储软件程序、服务或操作系统产生的消息记录的文件。不同的日志文件记载不同的信息。
Windows网络操作系统都设计有各种各样的日志文件,如应用程序日志,安全日志、系统日志、Scheduler服务日志、FTP日志、WWW日志、DNS服务器日志等等,这些根据你的系统开启的服务的不同而有所不同。我们在系统上进行一些操作时,这些日志文件通常会记录下我们操作的一些相关内容,这些内容对系统安全工作人员相当有用。比如说有人对系统进行了IPC探测,系统就会在安全日志里迅速地记下探测者探测时所用的IP、时间、用户名等,用FTP探测后,就会在FTP日志中记下IP、时间、探测所用的用户名等。
电脑里的日志是指日志数据,可以是有价值的信息宝库,也可以是毫无价值的数据泥潭。要保护和提高你的网络安全,由各种操作系统、应用程序、设备和安全产品的日志数据能够帮助你提前发现和避开灾难,并且找到安全事件的根本原因。
2.4.2日志文件格式
(1)W3C扩展日志文件格式
W3C扩展日志文件格式是IIS(Microsoft IIS)的默认日志格式,其内容编码为默认的ASCII文本。可以通过IIS管理器选择各种不同的字段包含在这种日志文件内,这样可以使你的日志内容更加人性化。其实系统是通过HTTP.sys句柄来处理W3C扩展日志的,W3C内容格式完全是通过读取HTTP.sys的内核缓存进行筛选获取的[14]。
表2-1中列出各种可选字段(“字段标识”列为实际参数名)及其描述,并通过Default列记录该字段是否默认被‘包含’了 (即文件格式)。
表2-1 W3C扩展日志文件格式
字段
字段标识
描述
Default(Y/N )
日期
date
动作发生时的日期。
Y
时间
time
动作发生时的时间(默认为UTC标准)。
Y
客户端IP地址
c-ip
访问服务器的客户端IP地址。
Y
用户名
cs-username
通过身份验证的访问服务器的用户名。不包括匿名用户(用‘-’表示)。
Y
服务名
s-sitename
客户所访问的Internet服务名以及实例号。
N
服务器名
s-computername
产生日志条目的服务器的名字。
N
服务器IP地址
s-ip
产生日志条目的服务器的IP地址。
Y
服务器端口
s-port
服务端提供服务的传输层端口。
Y
方法
cs-method
客户端执行的行为(主要是GET与POST行为)
Y
URI Stem
cs-uri-stem
被访问的资源,如Default.asp等。
Y
URI Query
cs-uri-query
客户端提交的参数(包括GET与POST行为)。
Y
协议状态
sc-status
用HTTP或者FTP术语所描述的、行为执行后的返回状态。
Y
Win32状态
sc-win32-status
用Microsoft Windows的术语所描述的动作状态。
N
发送字节数
sc-bytes
服务端发送给客户端的字节数。
N
接受字节数
cs-bytes
服务端从客户端接收到的字节数。
N
花费时间
time-taken
执行此次行为所消耗的时间,以毫秒为单位。
N
协议版本
cs-version
客户端所用的协议(HTTP、FTP)版本。对HTTP协议来说是HTTP 1.0或者HTTP 1.1。
N
主机
cs-host
客户端的HTTP报头(host header)信息。
N
用户代理
cs(User-Agent)
客户端所用的浏览器版本信息。
Y
Cookie
cs(Cookie)
发送或者接受到的cookie内容。
N
Referrer
cs(Referer)
用户浏览的前一个网址,当前网址是从该网址链接过来的。
N
(2)本系统日志格式如图2-1
17:53:59.500 BBB(221) NOTICE BBB_Start.c(400) program_Start, data_init, Start_event, Init
17:53:59.500 BBB(221) NOTICE BBB_Start.c(400) program_Start, data_init, Start_event, Init
时间
(时:分:秒)
执行中任务名
`任务名`+(任务ID)
日志种别
・ NOTICE
・ RCV_EVT
・ RCV_WTE:
・ WARNING
・ ERROR
・ FATAL
>
時:分:秒
参数及注释
※根据日志种别的不同格式也不同。
图2-1 LST系统日志格式
日志的单位以行计算,一行为一个单位。(任务间如果有传递信息的话,加在该日志的下一行。)
到「参数及注释」为止的条目,用空格分隔。
「参数及注释」内的内容有空格和逗号进行分隔。 (以行末为结束)
下面分别介绍各个日志种别的不同部分。
表2-2 日志种类
日志种别
内容
<参数及注释>
NOTICE
为了合法性确认和数据确认,在程序中开始操作。
先是插入文件名和日志的行号,然后注释等。
RCV_EVT
任务间的事件(执行中的任务由事件通知)
先是16进制的数据(12位)、接着是参数。(最多可带三个参数)另外,上述的数值根据(第一参数)的不同,在下一行中附加消息内容。
RCV_WTE
任务间的事件(从执行中任务发出的事件通知)
和RCV_EVT相同。
WARNING
从发生警告的地方开始。
格式有一些不同,但是可以和NOTICE同样处理。
ERROR
从发生错误的地方开始。
和NO0TICE一样。
FATAL
从放生致命的地方开始
和NO0TICE一样。
第3章 日志动态分析系统设计
3.1 系统需求分析
3.1.1 系统概要:
本次设计是基于日方客户的软件需求作成的,因此我们的需求分析任务就是对客户作成的“要求式样书”的式样理解,其中包括软件所需要实现的一些主要功能,然后基于该式样书设计好详细式样书,而详细式样书就是此次毕业设计的一个框架,其中包括整个项目的流程以及各种命名规约等。在此期间,我们可以通过提QA票(Question & Answer)来向客户确认一些有歧义的地方,然后根据客户的邮件回复,注释清楚,以确保整个项目都能符合客户的要求。
通过式样理解,该系统主要包括以下几个功能:
1. 基本机能(文件的读入/保存、全选/复制功能、文字列检索功能);
2. 抽出项目定义(抽出机能的编辑及删除)、简单抽出;
3. 时序图的作成,经过时间的计算;
4. 2个文件的比较;
5. 复杂抽出(根据多个条件的选择来抽出);
6. 其他机能。
图3-1 日志分析系统结构图
如上图所示,这是此次设计的日志分析系统的结构图。
3.1.2 系统功能一览表
表3-1 系统功能一览
基本功能
显示界面
表示、移动
行号表示
专栏表示
文件的操作
读入
保存
读入文件名的表示/替换
检索功能
指定行的检索
关键字的检索
有差异地方的检索
编辑功能
复制
全选
个别功能
消息数据的抽出
简单抽出
根据多个指定条件抽出
抽出条件定义
时序图作成
时序图作成
经过时间的算出
检出处理
抽出的解除
解除处理
两条日志记录比较
表示、移动
同一个文件的比较
自定义设定
抽出项目定义
显示与颜色设定
字体切换
时序图作成选项
3.2 系统设计
系统总的流程如图4.1所示。
图3-2 系统流程图
通过系统的需求分析,应该对该项目有了初步的认识。根据图3-1的日志分析系统结构图以及图3-2的系统流程图,该项目主要分为图3-3所描述的几个界面处理,本章节主要根据这几个界面来进行系统界面各个模块的功能设计。
界面处理
文件操作界面处理
编辑界面处理
检索界面处理
动作補助界面处理
选项设定界面处理
数据抽出处理
时序图作成处理
文件解析处理
图3-3 界面处理说明
3.2.1 软件界面的基本功能:
1. 起始时的界面设计。
启动时,打开程序的总体框架,不打开任何文件。在“ファイル”(文件)菜单下“開く”(打开)、“終了”(关闭)、“全終了”(全部关闭)三个选项是可用的。此时可以实现文件的打开,程序的关闭和全关闭机能。
2. View表示的设计。
当打开一个或多个日志文件时,会将日志文件显示到程序的客户区,显示的是日志的全部正文部分,去除日志头,并且在左上角有个下拉框,显示的是打开的文件的名字。这个下拉框是放在一个ToolBar控件中的。
3. 另存为的设计。
可以将一个日志文件另存到指定的文件中。如果日志没有被抽出,则将日志的全部内容保存到指定的文件中,但是要去除日志头,如果日志已经被抽出,则只将抽出的部分显示出来,且去除日志头。
4. 全选/复制的设计
在“編集”(编辑)菜单下有“コピー”(复制)与“すべて選択”(全选)两个选项,可以对打开的文件进行全选和复制功能,但是不能粘贴,因为客户区是只读的。
3.2.2 软件主要功能的设计:
1.“検索”(检索)菜单栏下的功能:
(1)“検索”(检索):根据指定的文字列检索。
(2)“上候補/下候補”(向上跳/向下跳):需要继续检索相同文字列时使用。
(3)“指定行”:将光标跳转到指定的行。
(4)“ファイルの先頭/ファイルの最後”(文件起始位置/文件末尾):调转到当前表示文件的起始位置或终了位置
(5)“差異のある場所”(有差异的地方):在进行2个文件比较的时候,从光标位置开始选择出2个文件第一个差异的地方。
2. “ツール”(工具) 菜单栏下的功能:
(1)“メッセージデータの抽出”(消息数据的抽出): 跳出抽出条件设定画面,有简单抽出与复杂抽出可供选择。简单抽出的功能是要在编辑框中输入文字列,然后将日志文件中所有包含这个文字列的行都提取出来,并且在视图中显示抽出的结果。复杂抽出是在简单抽出的文本框为空时才能使用的,因为它优先级较低。可以同时根据1~10个条件来判断,抽出需要的日志。这些条件可以是“AND”或“OR”的关系。如果是“AND”关系,则不能出现两个相同种类的条件(因为种类相同的条件只有两种情况,一是完全相同,而是完全不同,完全相同的条件没有意义,而完全不同的条件在“AND”的关系下抽不出任何数据。);如果是“OR”的情况,则允许出现相同种类的条件。复杂抽出的条件是可以保存的,并且可以通过这个文件在下一次的复杂抽出时直接读取。
(2)“シーケンス図の作成”(时序图的作成): 简单而言就是视觉性地表示任务之间的动作,如图3-4所示。
AAAタスク
BBBタスク
CCCタスク
DATA_READ
受信要求
受信应答
RETURN
图3-4 任务间的动作
(3)“経過時間の算出”(经过时间的计算): 这个功能是计算选中行的时间差。
(4)“二つの動作ログ比較”(两个日志文件比较): 这个功能首先要进行视图的切分,将需要比较的文件放在两个视图中,然后通过差异场所的查找功能,从光标处查找到第一个差异的地方,并把他们选中,把光标跳转到差异的地方。如果找不到差异的地方,则弹出对话框告知客户两个文件自光标处以下是相同的。
(5)“抽出の解除”(抽出的解除): 这个功能是取消自定义抽出项目的命令,恢复到抽出前的状态。
3. “オプション”(选择) 菜单栏下的功能:
(1)“抽出項目定義”: 这个功能的要求是可以自定义抽出项目的命令,以改变配置文件(“Extract.ini”),这些命令要符合规定的语法,从而实现日志文件的动态分析。这个功能一般是由有一定程序基础的人使用。
(2)“表示とカラー”(显示颜色): 可选择不同字段所表示的颜色。
(3)“フォント”(字体): 可设定不同的字体及大小。
(4)“その他”(其他): 这个机能跟时序图的作成相关,它定义了时序图要表示哪几个任务之间的动作,并且指定时序图的式样,如任务之间相隔多少个字符等。
3.2.3模块的难点
在模块初始化的时候,读取客户的定义的语法文件Extract.ini文件,利用双重vector的嵌套把客户的定义的语法文件Extract.ini文件中的“项目名”及其它们的“指令名”存入到vector中。
Vector类是用于存储不定长线性序列的包容器,提供快速随机访问,这一点与C++所支持的基本数据类型相同,但是基本数据类型不是面向对象机制的。何况C++中的数组是固定大小的,虽然是动态分配,但是机构不是动态的。而vector是面向对象的动态结构,大小不固定,又称灵活的数组,自己掌握存储管理。在插入,删除数据时,vector能扩展和压缩大小。还有一个特点是vector可以像使用数组一样,通过[ ]运算符访问元素。在vector的末尾添加数据速度很快。当添加数据时,vector的大小自动的增加,不用担心放不下新的元素[10]。
基于vector的特点,利用它很好的读取了Extract.ini文件,并完成了“项目名”及其它的“指令名”的存储和处理。
使用二维vector的目的是因为在模块的界面是必须要达到项目名和它们的指令名必须相关联。二维vector应用示意图如图3-5。
外层vector装的是项目名
内层vector装的是指令名
图3-5 二维vector应用示意图
第4章 日志动态分析系统实现
4.1 整体效果
运行程序并打开一个或多个日志文件,可通过左上角的下拉框来选择想要解析的日志文件,如下图所示:
图4-1 view画面
主菜单栏上有多个下拉菜单,根据自身的需求做不同的操作。如“ツール”(工具)下拉菜单,即中文的工具下拉菜单,里面的选项“メッセージデータの抽出”(信息数据的抽出)所对应的界面是图4-2抽出的画面。其中“抽出条件読み込み”(抽出条件读入)所对应的是从环境文件中读入抽出条件。“抽出条件保存”所对应的是把该对话框重新设置好的抽出条件保存到环境文件中。“抽出”(实行抽出)所对应的是根据当前的条件实行抽出。
图4-2抽出画面
在简单抽出的文本框中输入抽出条件或者选择追加设置多个抽出条件,但简单抽出与复杂抽出不能同时进行,如果在两个方面都设置了抽出条件,系统将自动只按照简单抽出条件来执行抽出。然后点击抽出实行按钮,则在图4-1 view画面中只显示出所要抽出的记录,如图4-3是简单抽出后的界面,复杂抽出界面于简单抽出界面类似。
图4-3 简单抽出后画面
在实行“ツール”(工具)下拉菜单中的“シーケンス図の作成”(时序图的作成)的功能之前,最好先对时序图的作成的条件进行设置,如要指定想要表示的任务,任务之间的文字间隔,以及是否换行等等,这些设置是在 “オプション” (选择)菜单栏下的“その他”(其他)选项中设置。具体画面如图4-4时序图的作成的设置画面,“表示タスクの指定”(设置要表示的任务)下面的5个文本框是决定时序图作成时所要显示出来的任务,“タスク間の文字間隔”(任务间的文字间隔)是设置时序图中各个人物之间的间距,“折り返し”(换行)即决定时序图中各任务的事件参数在间隔不够的情况下是否执行换行。设置好所有的条件后便可直接点击“终了”(结束)按钮,点击“キャンセル”(取消)选择退出。
图4-4 时序图的作成的设置画面
设置好时序图作成的条件后,便可点击“シーケンス図の作成”(时序图的作成),点击后将会在当前路径生成一个文本文件,该文本文件就是所谓的时序图。其具体样式如图4-5 时序图。这里的“AAAタスク”(AAA任务)“BBBタスク”(BBB任务)“CCCタスク”(CCC任务)表示各个任务,而“ECT”则是没有指定的任务事件表示的地方,由图4-4画面中的“指定外タスクイベントの取り扱い”(指定以外的任务活动的处理)单选框来决定是否将未指定的任务事件显示在“ECT”后面。最前面是事件发生的时间,各任务之间的箭头是任务之间的消息响应。
图4-5 时序图的作成画面
另一个功能是指定行查找,具体界面如图4-6 指定行的画面。在该对话框的“行番号”(行号)文本框中输入所要查看的行号,点击“移動”(移动)按钮便可跳转到该行,而点击“キャンセル”(取消)按钮,则退出指定行迁移的对话框。
图4-6 指定行的画面
最后是时间差算出的功能,如图4-7时间差算出界面所示,在当前活动窗口选中几行记录,“ツール”(工具) 菜单栏下的“経過時間の算出”(经过时间的计算)选项,则在活动窗口的右上方将会自动生成一个静态文本框,显示出所选行数的最后行与最前行之间的时间差。
图4-7 时间差算出界面
4.2 实现过程
该系统的工程量较为庞大,因此整个工程被分成了6个模块来分配给3个小组成员来完成,在这里主要分析由本人所担任模块的实现过程,分成三块来具体描述:时序图生成子系统,条件定义子系统,以及日志抽出子系统。
4.2.1 时序图生成子系统的实现
该功能生成的任务时序图能帮助用户对日志进行分析,为了更好地说明该功能的实现,下面将结合各图表来具体说明。如图4-8所示,该图为一条日志信息的分析。
图 4-8 日志信息分析
从图中我们可以看出,每条日志信息都有其特殊的含义,但不是每条信息都产生消息,我们主要提取的信息是每个任务产生的消息,该消息也称为有用信息。在这里我们只对日志种别为RCV_EVT 和RCV_WTE的消息进行提取。
图4-9是该条信息所产生的数据流向图,也是我们将要生成的任务时序图的其中一条任务。
图4-9 任务数据流向图
从图中我们看到的箭头即为数据的流向,EV1_MSG该参数指明任务BBB需要发出一条信息给系统,参数是由任务CCC传来。紧接着该行信息的下面就产生了一条消息。至于消息的意义我们不必多说,因为现在我们是为了实现功能而简单提下。
图 4-10 日志中的一条信息
有参数接受的任务必然会有参数传递的任务,图4-10就是传递参数的信息。该条信息的数据流向图如图4-11所示:
图4-11 任务数据流向图
从图上我们可以看出任务BBB由RCV_WTE的日志种别决定向系统送出一些参数,虽然没有任务接受,但由第一参数EV1_LED(LED)决定在该事件发生时向该事件发送参数。
由以上分析我们可以知道该功能的实现主要由信息中的日志种别是否是EVC_XXX来决定,如果符合条件,则将其取出并通过语法分析进行分析后将有效信息以如图4-12任务时序图的方式保存于文本文件中。其保存的界面为图4-13。
图4-12 任务时序图
图4-13 时序图保存界面
清楚具体的实施过程以后,接下来便是编程工作,在此就实现主要功能的几条重要的代码及概念解析一下,具体实现代码请见附录。
1. 读取环境文件:
GetPrivateProfileString(_T("SEQUENCE"),_T("TASKNAME1"),_T(" "),
SName, 10, g_strCondition);
m_strGettaskNm[0] = SName;
上面几句代码在时序图作成模块中起着重要的作用,GetPrivateProfile String函数是用来读取环境文件的函数,其中第一个参数是INI文件即环境文件中的一个字段名,第二个参数是第一个参数所指的字段下的一个键名,也就是里面具体的变量名,第三个参数是在没有其前两个参数值的前提下,将此值赋给变量,第四个参数是接收INI文件中的值的CString对象,即接收缓冲区,第五个参数是接收缓冲区的大小,最后一个参数便是完整的INI文件路径名。通过读取环境文件的数据,来确定时序图作成的条件。
2. 写入环境文件:
WritePrivateProfileString(_T("SEQUENCE"),_T("SEQ_LOGTYPE1"),_T("RCV_EVT"),g_strCondition);
相对应读取环境文件,写入环境文件在时序图作成中同样有较大的分量,而WritePrivateProfileString函数正式写入环境文件的一个函数,其中第一个参数也是INI文件即环境文件中的一个字段名,第二个参数也是第一个参数所指的字段下的一个键名,但第三个参数是是键值,也就是变量的值, 必须为LPCTSTR或CString类型,第四个参数是完整的INI文件路径名。通过写入环境文
展开阅读全文