!!!!!!!!!!!!
分类: LINUX
2010-02-08 17:11:02
一种日志和异常探针的实现方法
技术领域
本发明涉及到嵌入式软件开发中的日志和异常探针的实现。
背景技术
所谓日志(Log)是指系统所指定对象的某些操作和其操作结果按时间有序的集合。每个日志文件由日志记录组成,每条日志记录描述了一次单独的系统事件。通常情况下,系统日志是用户可以直接阅读的文本文件,其中包含了一个时间戳和一个信息或者子系统所特有的其他信息。日志文件为系统的相关活动记录必要的、有价值的信息,这对系统监控、查询、报表和安全审计是十分重要的。在Windows系统中日志主要包括应用程序、安全、系统等几个部分。它记录着各种系统服务的启动、运行、关闭等信息。在Linux系统中,有三个主要的日志子系统:连接时间日志、进程统计日志、错误日志。异常就是程序在运行时出现的错误,这些异常有的很严重,有的则较轻。
日志和异常探针模块(Log and Abnormity Probe, 简称LAP)主要是就是用来记录系统的主要的运作情况和程序运行时出现的异常。用户通过查询日志文件,可以了解设备的一些重大操作。日志需要存储诸如系统重起、用户修改配置等重要信息,数据量相对小些。异常探针则在程序发生异常时记录异常发生的时间、异常所在的文件、行数、原因码、3个变量值,用户通过异常探针可以详细的了解整个异常发生的过程。
内容
LAP 按照功能分为日志、异常上传,日志查看,日志、异常收集,日志、异常存储四部分,还有转换工具。顾名思义,日志的收集模块专门负责接收各个模块发来的日志和异常数据,然后通过存储模块将这些数据存储在flash系统参数区中或异常文件中。上传模块收到上传命令后,会将系统参数区中的日志数据或异常文件的异常记录上传给用户端的ftp服务器;而日志查看模块将日志的数据显示给用户终端。
日志异常探针LAP,就像linux系统中的Syslog程序一样,以消息的方式接收其它各个模块发来的需要记录的日志、异常,然后将这些数据添加记录在日志flash、异常文件中,同时LAP也接收来自命令消息,主要有查看日志,上传日志异常,并进行响应的操作。
LAP消息的来源主要是两部分:一部分是,来自命令,主要是查看、上传日志/异常;另一部分,来自LAP以外的其它各个软件模块,主要是上报异常、日志数据。
A. 用户通过在终端输入命令,LAP判断识别这些命令,然后 LAP进行日志查看、上传,异常上传操作,最后将操作结果显示在终端。
B. 其它各个模块将需要记录日志的重要操作和出现的异常以消息的方式发送日志、异常探针LAP,LAP将日志存储到flash中的系统参数区,将异常存储到异常文件中。
由于上传给用户的日志、异常文件是二进制文件,用户是无法直接阅读的,所以,转换工具主要是负责将二进制的日志、异常文件转换成可阅读的文本文件,也可以将异常文件导出到excel表中,方便用户对异常的查找排序。
附图说明
表1 日志的存储形式。
表2 异常记录格式。
图1 日志、异常记录的存储方式。
图2 日志、异常收集存储流程图。
图3日志查看流程图。
图4日志、异常文件上传流程图。
图5日志文件转换流程图。
具体实施方式
1)日志异常的存储位置
系统的重要操作和出现的异常需要永久的记录在系统中,以待研发人员或用户查看使用。日志主要存储在一个命名为系统参数区的部分,系统参数区位于flash中的非文件系统区,断电之后仍能存储信息。日志之所以存储在系统参数区主要是考虑日志安全的需要。异常存储在文件,设备断电时这些文件还是能够存在的。
)日志、异常的存储格式
由于嵌入式设备的存储空间有限不可能记录所有系统的运作日志、只能记录一些重要、有用的日志。主要包括:上电启动、复位、配置、版本下载、版本激活、反激活、uboot升级、lmt登录等。
日志文件的存储格式:如下
[事件(消息)ID 时间 事件描述信息]
事件ID:主要是标记事件的ID号。
时间:主要是记录发生的时间,记录从1970年以来经历的秒数。
事件描述信息:主要是说明发生这个事件的状态、原因、成功等情况。用户也可以根据具体情况,进行一些说明性的调整。如表1所示。
异常探针在文件中的存储格式如下:
[所在文件ID 所在行 时间 3个变量值 原因码]
所在文件ID:表示异常发生所在的文件;
所在行:记录异常发生的在文件的第几行;
时间:异常发生的时间,记录从1970年以来经历的秒数;
3个变量值:记录异常时,记录3个变量值,这些变量的选取,是由用户自己确定的。
原因码:系统对异常原因进行统一定义,一种原因对应一个码值,原因码的位置就是添加发生异常时的原因的码值。这些原因码是由用户自己定义的。如表2所示。
)日志、异常的存储方式
由于异常是按照结构体形式存储到二进制文件中的,每条异常记录大小是固定的,并且是按照时间排列的,所以异常记录在文件中采用循环存储的方式,当记录超过10000条时,新的异常记录会覆盖掉第一条记录,也就是最老的那条记录。过程如图1所示。
日志存储在系统参数区,最多可以记录105条,也是按照结构体形式存储的,每条日志大小是固定的,所以日志的存储同样采用循环存储方式。
4)日志、异常的收集与存储
LAP以迭代服务器的方式顺序接收、处理各个模块发来的消息。根据收到的消息的消息类型确定具体的操作。如果收到的是日志、异常数据,LAP会将日志存储在系统参数区,将异常存储在异常文件中;如果收到的是日志查看消息,LAP会读取系统参数区的日志数据,显示到终端;如果收到的上传日志消息,则将系统参数区的日志上传给客户端的ftp服务器端;如果收到的上传异常消息,则将异常文件中的异常数据上传给客户端的ftp服务器。其流程图如图2所示。
4)日志查看
用户在终端输入查看日志命令,LAP 识别这个命令,然后LAP将读取系统参数区的日志数据,并将二进制的日志数据解析ascii形式,然后将这些解析后的数据显示到终端。其流程图如图3所示。
5)日志、异常文件上传
LAP 根据命令参数得知要上传日志文件、还是异常文件,并过ftp服务器端的ip、端口、用户名、密码。LAP与ftp服务器建立联系的过程如下。
A. LAP从命令中获取ftp服务器ip、端口号,并与ftp服务器建立命令通道,ftp服务器响应成功,则进行下一步,否则LAP在终端显示建链失败;
B. LAP以用户名、密码为参数,向ftp服务器发送命令USER、PASS, 登录到ftp服务器,ftp服务器响应成功,则进行下一步,否则LAP在终端显示建链失败;
C. LAP向ftp服务器发送命令TYPE I,表示传送的文件类型为二进 制文件,ftp服务器响应成功,则进行下一步,否则LAP在终端显示建链失败;
D. LAP向ftp服务器发送命令STOR,表示要上传文件,ftp服务器响应成功,则进行下一步,否则LAP在终端显示建链失败;
E. LAP向ftp服务器发送命令PASV,表示工作在被动方式,ftp服务器响应成功,则进行下一步,否则LAP在终端显示建链失败;
F. LAP等待ftp服务器发来的响应,响应中包括ftp服务器接收数据的所用的ip和端口号,LAP使用ftp服务器传来的ip和端口号建立数据通道,向ftp服务器发送日志/异常数据;
G. 当日志/异常数据发送完后,LAP向ftp服务器发送命令QUIT,表示退出登录, LAP在终端显示上传失败;
H. 如果在上传时,出现了断点情况,则LAP将终止上传, LAP在终端 显示上传失败。
其流程图如图4所示。
6)日志文件的转换
每条日志包括事件ID、时间和事件描述信息。
A. 事件ID和事件名有具体的对应关系,定义在事件id文件中。事件id文件是一个头文件,定义了事件id和事件名对应的宏。
事件id文件EventId.h的内容如下:
#define start (0x0001)
#define reset (0x0002)
...
事件id文件为一个头文件,里面定义的的有关事件名称的宏。
B. 转换工具读取日志文件的每条日志,将日志的事件ID和事件id文件中的宏值比较,相等时,则宏名就是事件名,然后将宏名存放到转换后的文件中,如果没有匹配的宏,则将事件id拷贝到转换后的文件中;
C. 时间在日志文件是以1970年经过的秒来记录的,需要转换为年月日时分秒的形式;
D. 事件描述信息在日志文件中是按照ascii码存储的,直接拿过来就可以了。
其流程图如图5所示。
7)异常文件的转换
每条异常包括所在文件ID、所在行、时间、三个变量值和原因码。
A. 所在文件ID和具体的文件名之间的对应关系定义在文件id文件中,文件id是一个头文件,文件id文件中定义的是文件id与文件名的对应宏,文件id文件FileId.h中的内容如下:
#define cli.c (0x0001)
#define ris_epld_drv.c (0x0002)
...
宏值就是文件名。
文件ID和文件名的转换过程和日志的事件id的转换类似, 转换工具读取异常文件的每条异常记录,将异常中文件id和文件id文件中的宏值比较,相等时,则宏名就是文件名,然后将宏名存放到转换后的文件中,如果没有匹配,就将文件id拷贝到转换后的文件中;
B. 时间和日志的时间处理一样;
C. 三个变量值在日志文件中按照二进制格式存储,按照16进制数格式转换为文本格式,每个变量需要10byte空间。例如: 0x12345678。
D. 原因码在日志文件中以二进制格式存储,转换后为原因码对应的宏,没有宏的显示数值,原因码的宏定义在头文件Pub_ErrorDef.h中,转换工具通过读取这个文件进行转换。
其流程图与日志转换类似。