一种日志管理的实现方法

文档序号:7688321阅读:98来源:国知局
专利名称:一种日志管理的实现方法
一种日志管理的实现方法
技术领域
本发明涉及嵌入式系统技术领域,尤其涉及一种嵌入式系统中日志管理的 实现方法。背景技术
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪, 适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机 系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的 应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。在通信设备的监控系统中,日志文件是一种记录设备软硬件运行状态的重 要手段。通常,日志记录的越详细、简单、明了,对于观察设备的运行状态或 诊断设备的故障越有利。于是,在嵌入式领域,如何使日志操作更加简单、灵 活、多样便成了问题的焦点。在现有技术中,嵌入式系统的日志信息类型比较单一,可扩展性较差。曰 志任务在接收和处理其它任务发送过来的日志信息时,经常需要进行内存分配 或拷贝的工作,操作比较复杂。此外,随着设备运行时间的增长,日志信息不断增加,日志文件占用的磁 盘资源也就越来越大,对于磁盘资源非常有限的嵌入式系统来说,如何很好的 控制日志文件的大小而又能使日志文件保存相对较新的日志信息是十分重要 的。
发明内容本发明的目的是提供一种日志管理的实现方法,以达到操作简单、形式灵 活多样、可扩展性好的目的。为达到上述目的,本发明提出以下的技术方案一种日志管理的实现方法,该方法包括以下步骤A、 根据日志消息的类型定义对应的数据结构;B、 接收日志信息到接收缓冲区,根据所述日志信息的类型定义一个该类型 的指针,并将所述指针指向接收缓冲区;C、 将全局计数变量值加一并检测当前的全局计数变量值是否大于最大记录 条数值,如果是,则将全局计数变量清零后加一,执行步骤D;否则,将文件 读写指针保持原位,执行步骤D;D、 将处理后的所述日志信息按照设定格式写进日志文件形成日志记录;将 所述全局计数变量的值转换成字符串,并作为该条记录的标志位写入该条曰志 记录之后。优选地,所述步骤A之前还包括步骤A1、初始化消息队列和全局计数变量;A2、检测日志文件是否存在,如果是,则继续执行步骤A3;否则,创建日 志文件,再执行步骤A3;A3、査找所述日志文件的标志位并赋值给所述全局计数变量;A4、将文件读写指针移动至所述日志记录之后。其中,所述步骤B具体包括步骤 B1、所述消息队列接收日志信息;B2、所述消息队列将日志信息按优先级从高到低的顺序发送到接收缓冲区;B3、根据所述日志信息的类型定义一个该类型的指针,并将所述指针指向 接收缓冲区。其中,所述步骤B中接收的日志信息类型为调试信息或异常信息。 其中,所述步骤B3具体过程为根据缓冲区第一个字节的数据内容来检测日志信息的类型,并将该指针通 过强制类型转换指向接收缓冲区。优选地,所述步骤B3之后还包括步骤B4、检査日志上报的等级设置,并根据所述检查结果和该日志信息的上报 级别及所属模块判断是否需要上报到远程操作维护终端,如果是,则将所述日志信息上报到远程操作维护终端,执行步骤C;否则直接执行步骤C。 优选地,所述步骤D之后还包括步骤E、将文件读写指针向前移动,移动长度的大小为所述字符串长度的大小。优选地,所述步骤E之后还包括步骤E1、远程操作维护终端向嵌入式设备发出上报命令;E2、嵌入式设备建立上报文件,按照设定格式写入文件头和日志制作时间; E3、从所述日志文件中读取日志记录并写入所述上报文件中; E4、将所述上传文件上传至远程操作维护终端。 其中,所述步骤E3具体包括以下步骤E31、打开对应的日志文件,搜索所述标志位,将所述文件读写指针移动到 所述标志位之后;E32、依次读取所述日志文件中的日志记录,并将读到的日志记录写入所述 上报文件;E33、读取日志文件的最后一条日志记录之后,将所述文件读写指针移动到 日志文件的文件头,继续读取所述日志文件中的日志记录;E34、再次读取到标志位时,停止读取所述日志文件中的日志记录,上报文 件制作完成。其中,所述步骤E4具体过程为嵌入式设备将所述上传文件通过文件传输协议FTP上传至远程操作维护终端。从以上技术方案可以看出,本发明根据需要设定多种类型的日志信息,可 同时记录几种不同格式的日志文件。当接收到日志消息后,根据日志类型的参 数值定义相应数据结构的指针,并将该指针利用强制转换指向接收到的数据, 便可很方便地利用此指针对该消息所承载的数据进行操作,不需要进行任何内存分配或拷贝的操作。如果需要改变日志内容的格式,只需修改相应的数据结构即可;如果需要增加新的日志类型,只需要定义相应的日志类型参数值和定 义新的数据结构即可。本发明的实现方法可根据需要灵活的设计所需要的曰志 格式,操作简单方便、易实现,形式灵活多样可扩展性好。此外,本发明在写入日志信息前,首先将全局计数变量的值加一并检测全 局计数变量的值是否大于日志文件所允许记录的最大记录数值,如果小于或等 于该值,则将该条记录写入日志文件;如果大于该值,则将全局计数变量归零 后加一,并移动文件读写指针到文件头处,然后再将该条信息写入日志文件中。 这样就可以通过控制最大记录数的大小来控制日志的大小,使日志文件始终只 记录所允许的记录的条数,既避免了随着系统运行时间的增长,日志信息的增 多而使日志文件占用的磁盘空间过大的情况出现,又可以保证日志文件所记录 的日志内容始终为最新的日志信息。
图1为本发明方法的基本流程图;图2为本发明方法中初始化过程的流程图;图3为本发明方法中以被动方式上传日志文件过程的流程图。
具体实施方式下面结合具体的实施例对本发明的技术方案进行详细描述。 本发明提供一种日志管理的实现方法,如图1所示,主要包括以下步骤 步骤S101、根据日志消息的类型定义对应的数据结构。根据用户的具体需 要,可以灵活地设置日志内容的记录格式,同时记录几种不同格式的日志文件。 步骤S102、接收日志信息到接收缓冲区,根据所述日志信息的类型定义一 个该类型的指针,并将所述指针指向接收缓冲区。当消息队列中有日志信息到 达时,日志任务首先从消息队列中接收该条消息到接收缓冲区中,然后依据曰 志类型参数对该消息进行判断,以确定该条消息的类型,记载信息类型的数据内容一般位于该消息的第一个字节。根据判断结果定义一个该类型的指针,将 该指针通过强制类型转换指向接收缓冲区,不需要进行任何内存分配或拷贝的 操作,这样便可很方便的通过该指针对接收到的数据进行读取和处理。步骤S 103~S105、将全局计数变量值加一并检测当前的全局计数变量值是 否大于最大记录条数值,如果是,则将全局计数变量清零后加一,执行步骤 S106;否则,将文件读写指针保持原位,执行步骤S106。将全局计数变量的 值加一并检测全局计数变量的值是否大于日志文件所允许记录的最大记录数, 如果小于该值,则将该条记录写入日志文件,并接着将全局计数变量的值作为 标志位写入该条日志后;如果大于该值,则将全局计数变量归零,并移动文件 读写指针到文件头处,然后再将该条信息写入,并接着将全局计数变量的值作 为标志位写入该条日志后。这样就可以通过控制最大记录数的大小来控制日志 的大小,使日志文件始终只记录所允许的记录的条数,既避免了随着系统运行 时间的增长,日志信息的增多而使日志文件占用的磁盘空间过大的情况出现, 又可以保证日志文件所记录的日志内容始终为最新的日志信息。步骤S 106、将处理后的所述日志信息按照设定格式写进日志文件形成日志 记录;将所述全局计数变量的值转换成字符串,并作为该条记录的标志位写入 该条日志记录之后。定位好文件读写指针之后,对接收到的日志消息进行处理, 并将处理后的日志消息按照所要求的格式写入日志文件,并在完成此操作后, 将全局计数变量写入到此条日志记录后,标志该条记录在日志文件中所对应的 序号,同时也为下次打开日志文件进行读写指针的定位提供标志。在优选的实施方式中,本发明方法还包括步骤S107、将文件读写指针向前移动,移动长度的大小为所述字符串长度 的大小。写入操作完成后,将文件读写指针相对当前读写位置向前移动,移动 的大小为该标志位的长度。这样,当进行下一条记录的写入时,便可以覆盖掉 上一次所写入的标志位。指针移动完成后,则该条日志消息处理结束,可以继 续下一条消息的接收处理。其中,所述步骤S102将日志信息从消息队列发送到接收缓冲区、定义指针的过程包括以下步骤所述消息队列接收日志信息;然后,所述消息队列将日志信息按优先级从 高到低的顺序发送到接收缓冲区;再根据所述日志信息的类型定义一个该类型 的指针,并将所述指针指向接收缓冲区。其中,日志信息的优先级由发送日志 的任务的优先级决定,消息队列判断该条日志的优先级,并将具有最高优先级 的任务所发送的日志消息提前发送。在本发明中,通过消息队列来完成日志的接收和发送。利用消息队列的特 性,可以对发送到日志任务的消息进行缓冲,避免造成日志消息的丢失,还可 以避免发送日志的任务进行等待或长时间占用cpu资源,影响进程间的同步和调度。消息队列的工作模式一般为先入先出模式,在优选的实施例中,可以通过 设置消息队列的工作模式为基于优先级的模式来优先记录高优先级的日志信 息。日志信息的优先级由发送该日志信息的任务的优先级来决定,消息队列在 发送日志信息之时先检査队列中所有信息的优先级,把优先级高的日志信息先 发送出去,避免造成重要日志信息的丢失。在优选的实施例中,还可以将日志信息上报到远程操作维护终端,通过设 置日志消息的级别来使日志任务只上报指定级别的日志信息到远程的操作维护 终端,或只打印指定级别的日志信息到本地维护终端,使日志的分析工作更有 目的性,更简单、准确、明了,更有助于远程调试和故障诊断。在接收到日志 信息后,检查日志上报的等级设置,并根据所述检査结果和该日志信息的上报 级别及所属模块判断是否需要上报到远程操作维护终端,如果是,则将所述曰 志信息上报到远程操作维护终端,再将全局计数变量值加一并检测当前的全局 计数变量值是否大于最大记录条数值;否则直将全局计数变量值加一并检测当 前的全局计数变量值是否大于最大记录条数值。在步骤S101之前, 一般还需要进行日志任务初始化的过程,主要包括以下步骤步骤S201、初始化消息队列和全局计数变量;步骤S202、检测日志文件是否存在,如果是,则继续执行步骤S203;否 则,创建日志文件,再执行步骤S203;步骤S 203、査找所述日志文件的标志位并赋值给所述全局计数变量其中,该标志位所含数据信息为该标志位的前一日志记录在该日志文件中的序号,实际上相当于将该序号赋给全局计数变量;步骤S204、将文件读写指针移动至所述日志记录之后。主程序开启日志任务后,日志任务首先初始化消息队列和全局计数变量,然后打开日志文件。若日志文件不存在,则创建日志文件;若日志文件存在, 则查找标志位,则标志位前的那条记录便为设备上一次运行时的最后一条日志 记录。读出该条记录在该日志文件中的序号并赋值给全局计数变量,然后移动 文件读写指针到该条记录后。完成以上操作后,日志任务初始化完成,准备从 消息队列中接收其它任务发送过来的日志消息。在优选的实施例中,本发明还可以根据需要将日志文件上传到远程操作维护终端,上报过程包括以下步骤步骤301、远程操作维护终端向嵌入式设备发出上报命令。这种上报方式为被动方式远程操作维护终端通过发送命令给设备,通知设备按指定格式制 作文件,设备在接收到此消息后制作相应的文件并上传到远程操作维护终端。步骤302、嵌入式设备建立上报文件,按照设定格式写入文件头和日志制作时间。步骤303、从所述日志文件中读取日志记录并写入所述上报文件中。 步骤304、将所述上传文件上传至远程操作维护终端。 需要说明的是,制作好的相应格式的文件可以通过文件传输协议FTP (File Transfer Protocal)上传,也可以通过其它网络方式进行上传,FTP为本发明的优选实施方式。其中,步骤S303的过程具体包括首先,打开对应的日志文件,搜索所述 标志位,将所述文件读写指针移动到所述标志位之后;然后,依次读取所述日 志文件中的日志记录,并将读到的日志记录写入所述上报文件;当读取日志文 件的最后一条日志记录之后,将所述文件读写指针移动到日志文件的文件头, 继续读取所述日志文件中的日志记录;当再次读取到标志位时,停止读取所述 日志文件中的日志记录,上报文件制作完成。此时新文件中的日志信息应该是 按照指定格式编排的,以日志产生时间为顺序来存放的,有利于工作人员依据 新制作的日志文件进行故障分析和诊断。这种上报方式为主动方式日志在某种设定的条件下触发制作日志文件的 操作并上传到远程操作维护终端。实施例这里假设设备在运行过程中将会发送两种格式的日志消息调试消息和异 常消息,两种日志消息的数据结构分别为数据结构一和数据结构二。并要求将 调试日志消息存储为文本文件a.txt,用来记录设备运行过程的状态信息,需要 上报到远程操作维护终端;将异常日志消息按xml文件格式要求存储为xml文 件b.xml,用来记录设备运行过程中的异常信息,不需要上报到远程操作维护终 端。假设日志文件所允许记录的最大记录数都为5000条。首先,数据结构一和二定义如下<formula>formula see original document page 12</formula>INT32 id; INT32 level; INT32 code; INT8 *fmt;INT32 arg [MAX一LOG一ARGS];LOG—MSG;数据结构二typedef structINT8 kind; INT32 code; INT8 file[40]; INT32 line; INT32 state; INT8 times[40]; INT8 *info; }EXC—MSG;另外用于此例的变量定义及注释如下Char strBuf[1024]; / /消息队列接收缓冲区 LOG—MSG * pLogTxt = NULL; / /调试日志消息指针 EXC—MSG * plogXml = NULL; / /异常日志消息指针 lnt giNum =0; / /全局计数变量当有日志消息到达时,日志任务首先从消息队列中接收该消息并放到接收缓冲区strBuf中。根据strBuf的第一个字节即数据结构的INT8 kind字段来判 断该条消息属于哪种类型的日志消息。若是调试消息,则通过指针的强制转换 将pLogTxt指针指向strBuf;若是异常消息,则通过指针的强制转换将plogXml 指针指向strBuf。这样便可以很方便的获取对应数据结构中的对应字段。若日志任务收到的是调试消息,则首先检査日志信息的级别设置,并根据 检査结果和该条消息的id、 level值来判断是否需要上报到远程操作维护终端。 若需要上报,则通过socket上报到远端的操作维护终端,然后检查全局计数变 量giNum是否达到所允许的最大记录条数;若不需要进行上报,则直接检査全 局计数变量giNum的值是否达到所允许的最大记录条数。如果giNum大于该值, 则将移动文件读写指针到日志文件头处并将全局计数变量giNum清零后作加一 操作;如果giNum不大于该值,则不移动文件读写指针。完成文件读写指针的 定位后,将调试消息按照指定格式写入日志文件,并将标志位giNum转换成字 符串,写到该条日志记录后。然后将文件读写指针相对当前位置向前移动,移 动的大小为该标志位所转换成的字符串的长度。例如,giNum=123,转换成字 符串后为"123"。将"123"写入到日志消息后,文件读写指针相对当前读写位置向 前移动3个字节的长度。如果giNum=1222,转换成字符串后为"1222"。将"1222" 写入到日志消息后,文件读写指针相对当前读写位置向前移动4个字节的长度。 这样在记录下一条日志消息时便会覆盖掉本次写入的标志位。指针移动完成后, 则该条调试消息处理结束,继续开始下一条消息的接收处理。若日志任务收到的是异常消息,则直接检査全局计数变量giNum的值是否 达到所允许的最大记录数。如果不大于该值,则不移动文件读写指针;如果大 于该值,则将移动文件读写指针到日志文件头处并将全局计数变量giNum清零, 然后作加一操作;完成文件读写指针的定位后,通过操作pLogXml指针取得该 条日志消息中各个字段的值,并根据xml的文件格式要求将这些字段的值写入 到日志文件中。然后将标志位giNum转换成字符串,写到该条日志记录后,并 将文件读写指针相对当前位置向前移动,移动的大小为该标志位所转换成的字 符串的长度。这样在记录下一条日志消息时便会覆盖掉本次写入的标志位。指针移动完成后,则该条异常消息处理结束,继续开始下一条消息的接收处理。当设备接收到远程操作维护终端发送的日志文件上报命令后,开始制作日志文件并上传。假设要将异常日志制作成c.xml文件并上传到远程操作维护终 端。首先新建文件c.xml,按照x m 1文件的格式写入x m 1文件头及该日志文 件制作时间等相关字段。打开异常日志文件,搜索标志位,并将文件读写指针 移动到标志位后。这样该标志位后的第一条记录便为异常日志文件中最早的一 条日志记录。依次读取日志文件中的记录并将读到的记录写入文件c.xml。当读 到日志文件尾时,移动文件读写指针到文件头,继续读取,直到再次遇到标志 位,表明日志文件己读取完成。此时文件c.xml所记录的日志信息应该是以xm l文件格式存储,以记录产生的先后为顺序排列的。文件c.xml制作完成后,通 过ftp将此文件上传到远程操作维护终端,日志文件制作上传流程完成。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细, 但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域 的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和 改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附 权利要求为准。
权利要求
1. 一种日志管理的实现方法,其特征在于,该方法包括以下步骤A、根据日志消息的类型定义对应的数据结构;B、接收日志信息到接收缓冲区,根据所述日志信息的类型定义一个该类型的指针,并将所述指针指向接收缓冲区;C、将全局计数变量值加一并检测当前的全局计数变量值是否大于最大记录条数值,如果是,则将全局计数变量清零后加一,执行步骤D;否则,将文件读写指针保持原位,执行步骤D;D、将处理后的所述日志信息按照设定格式写进日志文件形成日志记录;将所述全局计数变量的值转换成字符串,并作为该条记录的标志位写入该条日志记录之后。
2、 根据权利要求1所述的一种日志管理的实现方法,其特征在于,所述步骤A之前还包括步骤A1、初始化消息队列和全局计数变量;A2、检测日志文件是否存在,如果是,则继续执行步骤A3;否则,创建日志文件,再执行步骤A3;A3、査找所述日志文件的标志位并赋值给所述全局计数变量;A4、将文件读写指针移动至所述日志记录之后。
3、 根据权利要求1所述的一种日志管理的实现方法,其特征在于,所述步骤B具体包括步骤B1、所述消息队列接收日志信息;B2、所述消息队列将日志信息按优先级从高到低的顺序发送到接收缓冲区; B3、根据所述日志信息的类型定义一个该类型的指针,并将所述指针指向接收缓冲区。
4、 根据权利要求1所述的一种日志管理的实现方法,其特征在于,所述步 骤B中接收的日志信息类型为调试信息或异常信息。
5、 根据权利要求3所述的一种日志管理的实现方法,其特征在于,所述步骤B3具体过程为根据缓冲区第一个字节的数据内容来检测日志信息的类型,并将该指针通 过强制类型转换指向接收缓冲区。
6、 根据权利要求3所述的一种日志管理的实现方法,其特征在于,所述步骤B3之后还包括步骤B4、检查日志上报的等级设置,并根据所述检査结果和该日志信息的上报 级别及所属模块判断是否需要上报到远程操作维护终端,如果是,则将所述曰志信息上报到远程操作维护终端,执行步骤C;否则直接执行步骤C。
7、 根据权利要求1 6中任一项所述的一种日志管理的实现方法,其特征在于,所述步骤D之后还包括步骤E、将文件读写指针向前移动,移动长度的大小为所述字符串长度的大小。
8、 根据权利要求7所述的一种日志管理的实现方法,其特征在于,所述步骤E之后还包括步骤E1、远程操作维护终端向嵌入式设备发出上报命令;E2、嵌入式设备建立上报文件,按照设定格式写入文件头和日志制作时间; E3、从所述日志文件中读取日志记录并写入所述上报文件中;E4、将所述上传文件上传至远程操作维护终端。
9、 根据权利要求8所述的一种日志管理的实现方法,其特征在于,所述步骤E3具体包括以下步骤E31、打开对应的日志文件,搜索所述标志位,将所述文件读写指针移动到 所述标志位之后;E32、依次读取所述日志文件中的日志记录,并将读到的日志记录写入所述 上报文件;E33、读取日志文件的最后一条日志记录之后,将所述文件读写指针移动到 日志文件的文件头,继续读取所述日志文件中的日志记录;E34、再次读取到标志位时,停止读取所述日志文件中的日志记录,上报文件制作完成。
10、根据权利要求8所述的一种日志管理的实现方法,其特征在于,所述 步骤E4具体过程为嵌入式设备将所述上传文件通过文件传输协议FTP上传至远程操作维护终端。
全文摘要
本发明公开了一种日志管理的实现方法,该方法包括以下步骤A.根据日志消息的类型定义对应的数据结构;B.接收日志信息到接收缓冲区,根据所述日志信息的类型定义一个该类型的指针,并将所述指针指向接收缓冲区;C.将全局计数变量值加一并检测当前的全局计数变量值是否大于最大记录条数值,如果是,则将全局计数变量清零后加一,执行步骤D;否则,将文件读写指针保持原位,执行步骤D;D.将处理后的所述日志信息按照设定格式写进日志文件形成日志记录;将所述全局计数变量的值转换成字符串,并作为该条记录的标志位写入该条日志记录之后。本发明的实现方法可根据需要灵活的设计所需要的日志格式,操作简单方便、易实现,形式灵活多样可扩展性好。
文档编号H04L12/26GK101272276SQ20081006666
公开日2008年9月24日 申请日期2008年4月22日 优先权日2008年4月22日
发明者平 沈, 鹿丙杰 申请人:深圳国人通信有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1