專利名稱:一種日志管理的實(shí)現(xiàn)方法
一種日志管理的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種嵌入式系統(tǒng)中日志管理的 實(shí)現(xiàn)方法。背景技術(shù):
嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),并且軟硬件可裁剪, 適用于應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī) 系統(tǒng)。它一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶的 應(yīng)用程序等四個(gè)部分組成,用于實(shí)現(xiàn)對(duì)其他設(shè)備的控制、監(jiān)視或管理等功能。在通信設(shè)備的監(jiān)控系統(tǒng)中,日志文件是一種記錄設(shè)備軟硬件運(yùn)行狀態(tài)的重 要手段。通常,日志記錄的越詳細(xì)、簡(jiǎn)單、明了,對(duì)于觀察設(shè)備的運(yùn)行狀態(tài)或 診斷設(shè)備的故障越有利。于是,在嵌入式領(lǐng)域,如何使日志操作更加簡(jiǎn)單、靈 活、多樣便成了問題的焦點(diǎn)。在現(xiàn)有技術(shù)中,嵌入式系統(tǒng)的日志信息類型比較單一,可擴(kuò)展性較差。曰 志任務(wù)在接收和處理其它任務(wù)發(fā)送過來的日志信息時(shí),經(jīng)常需要進(jìn)行內(nèi)存分配 或拷貝的工作,操作比較復(fù)雜。此外,隨著設(shè)備運(yùn)行時(shí)間的增長,日志信息不斷增加,日志文件占用的磁 盤資源也就越來越大,對(duì)于磁盤資源非常有限的嵌入式系統(tǒng)來說,如何很好的 控制日志文件的大小而又能使日志文件保存相對(duì)較新的日志信息是十分重要 的。
發(fā)明內(nèi)容本發(fā)明的目的是提供一種日志管理的實(shí)現(xiàn)方法,以達(dá)到操作簡(jiǎn)單、形式靈 活多樣、可擴(kuò)展性好的目的。為達(dá)到上述目的,本發(fā)明提出以下的技術(shù)方案一種日志管理的實(shí)現(xiàn)方法,該方法包括以下步驟A、 根據(jù)日志消息的類型定義對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);B、 接收日志信息到接收緩沖區(qū),根據(jù)所述日志信息的類型定義一個(gè)該類型 的指針,并將所述指針指向接收緩沖區(qū);C、 將全局計(jì)數(shù)變量值加一并檢測(cè)當(dāng)前的全局計(jì)數(shù)變量值是否大于最大記錄 條數(shù)值,如果是,則將全局計(jì)數(shù)變量清零后加一,執(zhí)行步驟D;否則,將文件 讀寫指針保持原位,執(zhí)行步驟D;D、 將處理后的所述日志信息按照設(shè)定格式寫進(jìn)日志文件形成日志記錄;將 所述全局計(jì)數(shù)變量的值轉(zhuǎn)換成字符串,并作為該條記錄的標(biāo)志位寫入該條曰志 記錄之后。優(yōu)選地,所述步驟A之前還包括步驟A1、初始化消息隊(duì)列和全局計(jì)數(shù)變量;A2、檢測(cè)日志文件是否存在,如果是,則繼續(xù)執(zhí)行步驟A3;否則,創(chuàng)建日 志文件,再執(zhí)行步驟A3;A3、査找所述日志文件的標(biāo)志位并賦值給所述全局計(jì)數(shù)變量;A4、將文件讀寫指針移動(dòng)至所述日志記錄之后。其中,所述步驟B具體包括步驟 B1、所述消息隊(duì)列接收日志信息;B2、所述消息隊(duì)列將日志信息按優(yōu)先級(jí)從高到低的順序發(fā)送到接收緩沖區(qū);B3、根據(jù)所述日志信息的類型定義一個(gè)該類型的指針,并將所述指針指向 接收緩沖區(qū)。其中,所述步驟B中接收的日志信息類型為調(diào)試信息或異常信息。 其中,所述步驟B3具體過程為根據(jù)緩沖區(qū)第一個(gè)字節(jié)的數(shù)據(jù)內(nèi)容來檢測(cè)日志信息的類型,并將該指針通 過強(qiáng)制類型轉(zhuǎn)換指向接收緩沖區(qū)。優(yōu)選地,所述步驟B3之后還包括步驟B4、檢査日志上報(bào)的等級(jí)設(shè)置,并根據(jù)所述檢查結(jié)果和該日志信息的上報(bào) 級(jí)別及所屬模塊判斷是否需要上報(bào)到遠(yuǎn)程操作維護(hù)終端,如果是,則將所述日志信息上報(bào)到遠(yuǎn)程操作維護(hù)終端,執(zhí)行步驟C;否則直接執(zhí)行步驟C。 優(yōu)選地,所述步驟D之后還包括步驟E、將文件讀寫指針向前移動(dòng),移動(dòng)長度的大小為所述字符串長度的大小。優(yōu)選地,所述步驟E之后還包括步驟E1、遠(yuǎn)程操作維護(hù)終端向嵌入式設(shè)備發(fā)出上報(bào)命令;E2、嵌入式設(shè)備建立上報(bào)文件,按照設(shè)定格式寫入文件頭和日志制作時(shí)間; E3、從所述日志文件中讀取日志記錄并寫入所述上報(bào)文件中; E4、將所述上傳文件上傳至遠(yuǎn)程操作維護(hù)終端。 其中,所述步驟E3具體包括以下步驟E31、打開對(duì)應(yīng)的日志文件,搜索所述標(biāo)志位,將所述文件讀寫指針移動(dòng)到 所述標(biāo)志位之后;E32、依次讀取所述日志文件中的日志記錄,并將讀到的日志記錄寫入所述 上報(bào)文件;E33、讀取日志文件的最后一條日志記錄之后,將所述文件讀寫指針移動(dòng)到 日志文件的文件頭,繼續(xù)讀取所述日志文件中的日志記錄;E34、再次讀取到標(biāo)志位時(shí),停止讀取所述日志文件中的日志記錄,上報(bào)文 件制作完成。其中,所述步驟E4具體過程為嵌入式設(shè)備將所述上傳文件通過文件傳輸協(xié)議FTP上傳至遠(yuǎn)程操作維護(hù)終端。從以上技術(shù)方案可以看出,本發(fā)明根據(jù)需要設(shè)定多種類型的日志信息,可 同時(shí)記錄幾種不同格式的日志文件。當(dāng)接收到日志消息后,根據(jù)日志類型的參 數(shù)值定義相應(yīng)數(shù)據(jù)結(jié)構(gòu)的指針,并將該指針利用強(qiáng)制轉(zhuǎn)換指向接收到的數(shù)據(jù), 便可很方便地利用此指針對(duì)該消息所承載的數(shù)據(jù)進(jìn)行操作,不需要進(jìn)行任何內(nèi)存分配或拷貝的操作。如果需要改變?nèi)罩緝?nèi)容的格式,只需修改相應(yīng)的數(shù)據(jù)結(jié)構(gòu)即可;如果需要增加新的日志類型,只需要定義相應(yīng)的日志類型參數(shù)值和定 義新的數(shù)據(jù)結(jié)構(gòu)即可。本發(fā)明的實(shí)現(xiàn)方法可根據(jù)需要靈活的設(shè)計(jì)所需要的曰志 格式,操作簡(jiǎn)單方便、易實(shí)現(xiàn),形式靈活多樣可擴(kuò)展性好。此外,本發(fā)明在寫入日志信息前,首先將全局計(jì)數(shù)變量的值加一并檢測(cè)全 局計(jì)數(shù)變量的值是否大于日志文件所允許記錄的最大記錄數(shù)值,如果小于或等 于該值,則將該條記錄寫入日志文件;如果大于該值,則將全局計(jì)數(shù)變量歸零 后加一,并移動(dòng)文件讀寫指針到文件頭處,然后再將該條信息寫入日志文件中。 這樣就可以通過控制最大記錄數(shù)的大小來控制日志的大小,使日志文件始終只 記錄所允許的記錄的條數(shù),既避免了隨著系統(tǒng)運(yùn)行時(shí)間的增長,日志信息的增 多而使日志文件占用的磁盤空間過大的情況出現(xiàn),又可以保證日志文件所記錄 的日志內(nèi)容始終為最新的日志信息。
圖1為本發(fā)明方法的基本流程圖;圖2為本發(fā)明方法中初始化過程的流程圖;圖3為本發(fā)明方法中以被動(dòng)方式上傳日志文件過程的流程圖。
具體實(shí)施方式下面結(jié)合具體的實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)描述。 本發(fā)明提供一種日志管理的實(shí)現(xiàn)方法,如圖1所示,主要包括以下步驟 步驟S101、根據(jù)日志消息的類型定義對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)。根據(jù)用戶的具體需 要,可以靈活地設(shè)置日志內(nèi)容的記錄格式,同時(shí)記錄幾種不同格式的日志文件。 步驟S102、接收日志信息到接收緩沖區(qū),根據(jù)所述日志信息的類型定義一 個(gè)該類型的指針,并將所述指針指向接收緩沖區(qū)。當(dāng)消息隊(duì)列中有日志信息到 達(dá)時(shí),日志任務(wù)首先從消息隊(duì)列中接收該條消息到接收緩沖區(qū)中,然后依據(jù)曰 志類型參數(shù)對(duì)該消息進(jìn)行判斷,以確定該條消息的類型,記載信息類型的數(shù)據(jù)內(nèi)容一般位于該消息的第一個(gè)字節(jié)。根據(jù)判斷結(jié)果定義一個(gè)該類型的指針,將 該指針通過強(qiáng)制類型轉(zhuǎn)換指向接收緩沖區(qū),不需要進(jìn)行任何內(nèi)存分配或拷貝的 操作,這樣便可很方便的通過該指針對(duì)接收到的數(shù)據(jù)進(jìn)行讀取和處理。步驟S 103~S105、將全局計(jì)數(shù)變量值加一并檢測(cè)當(dāng)前的全局計(jì)數(shù)變量值是 否大于最大記錄條數(shù)值,如果是,則將全局計(jì)數(shù)變量清零后加一,執(zhí)行步驟 S106;否則,將文件讀寫指針保持原位,執(zhí)行步驟S106。將全局計(jì)數(shù)變量的 值加一并檢測(cè)全局計(jì)數(shù)變量的值是否大于日志文件所允許記錄的最大記錄數(shù), 如果小于該值,則將該條記錄寫入日志文件,并接著將全局計(jì)數(shù)變量的值作為 標(biāo)志位寫入該條日志后;如果大于該值,則將全局計(jì)數(shù)變量歸零,并移動(dòng)文件 讀寫指針到文件頭處,然后再將該條信息寫入,并接著將全局計(jì)數(shù)變量的值作 為標(biāo)志位寫入該條日志后。這樣就可以通過控制最大記錄數(shù)的大小來控制日志 的大小,使日志文件始終只記錄所允許的記錄的條數(shù),既避免了隨著系統(tǒng)運(yùn)行 時(shí)間的增長,日志信息的增多而使日志文件占用的磁盤空間過大的情況出現(xiàn), 又可以保證日志文件所記錄的日志內(nèi)容始終為最新的日志信息。步驟S 106、將處理后的所述日志信息按照設(shè)定格式寫進(jìn)日志文件形成日志 記錄;將所述全局計(jì)數(shù)變量的值轉(zhuǎn)換成字符串,并作為該條記錄的標(biāo)志位寫入 該條日志記錄之后。定位好文件讀寫指針之后,對(duì)接收到的日志消息進(jìn)行處理, 并將處理后的日志消息按照所要求的格式寫入日志文件,并在完成此操作后, 將全局計(jì)數(shù)變量寫入到此條日志記錄后,標(biāo)志該條記錄在日志文件中所對(duì)應(yīng)的 序號(hào),同時(shí)也為下次打開日志文件進(jìn)行讀寫指針的定位提供標(biāo)志。在優(yōu)選的實(shí)施方式中,本發(fā)明方法還包括步驟S107、將文件讀寫指針向前移動(dòng),移動(dòng)長度的大小為所述字符串長度 的大小。寫入操作完成后,將文件讀寫指針相對(duì)當(dāng)前讀寫位置向前移動(dòng),移動(dòng) 的大小為該標(biāo)志位的長度。這樣,當(dāng)進(jìn)行下一條記錄的寫入時(shí),便可以覆蓋掉 上一次所寫入的標(biāo)志位。指針移動(dòng)完成后,則該條日志消息處理結(jié)束,可以繼 續(xù)下一條消息的接收處理。其中,所述步驟S102將日志信息從消息隊(duì)列發(fā)送到接收緩沖區(qū)、定義指針的過程包括以下步驟所述消息隊(duì)列接收日志信息;然后,所述消息隊(duì)列將日志信息按優(yōu)先級(jí)從 高到低的順序發(fā)送到接收緩沖區(qū);再根據(jù)所述日志信息的類型定義一個(gè)該類型 的指針,并將所述指針指向接收緩沖區(qū)。其中,日志信息的優(yōu)先級(jí)由發(fā)送日志 的任務(wù)的優(yōu)先級(jí)決定,消息隊(duì)列判斷該條日志的優(yōu)先級(jí),并將具有最高優(yōu)先級(jí) 的任務(wù)所發(fā)送的日志消息提前發(fā)送。在本發(fā)明中,通過消息隊(duì)列來完成日志的接收和發(fā)送。利用消息隊(duì)列的特 性,可以對(duì)發(fā)送到日志任務(wù)的消息進(jìn)行緩沖,避免造成日志消息的丟失,還可 以避免發(fā)送日志的任務(wù)進(jìn)行等待或長時(shí)間占用cpu資源,影響進(jìn)程間的同步和調(diào)度。消息隊(duì)列的工作模式一般為先入先出模式,在優(yōu)選的實(shí)施例中,可以通過 設(shè)置消息隊(duì)列的工作模式為基于優(yōu)先級(jí)的模式來優(yōu)先記錄高優(yōu)先級(jí)的日志信 息。日志信息的優(yōu)先級(jí)由發(fā)送該日志信息的任務(wù)的優(yōu)先級(jí)來決定,消息隊(duì)列在 發(fā)送日志信息之時(shí)先檢査隊(duì)列中所有信息的優(yōu)先級(jí),把優(yōu)先級(jí)高的日志信息先 發(fā)送出去,避免造成重要日志信息的丟失。在優(yōu)選的實(shí)施例中,還可以將日志信息上報(bào)到遠(yuǎn)程操作維護(hù)終端,通過設(shè) 置日志消息的級(jí)別來使日志任務(wù)只上報(bào)指定級(jí)別的日志信息到遠(yuǎn)程的操作維護(hù) 終端,或只打印指定級(jí)別的日志信息到本地維護(hù)終端,使日志的分析工作更有 目的性,更簡(jiǎn)單、準(zhǔn)確、明了,更有助于遠(yuǎn)程調(diào)試和故障診斷。在接收到日志 信息后,檢查日志上報(bào)的等級(jí)設(shè)置,并根據(jù)所述檢査結(jié)果和該日志信息的上報(bào) 級(jí)別及所屬模塊判斷是否需要上報(bào)到遠(yuǎn)程操作維護(hù)終端,如果是,則將所述曰 志信息上報(bào)到遠(yuǎn)程操作維護(hù)終端,再將全局計(jì)數(shù)變量值加一并檢測(cè)當(dāng)前的全局 計(jì)數(shù)變量值是否大于最大記錄條數(shù)值;否則直將全局計(jì)數(shù)變量值加一并檢測(cè)當(dāng) 前的全局計(jì)數(shù)變量值是否大于最大記錄條數(shù)值。在步驟S101之前, 一般還需要進(jìn)行日志任務(wù)初始化的過程,主要包括以下步驟步驟S201、初始化消息隊(duì)列和全局計(jì)數(shù)變量;步驟S202、檢測(cè)日志文件是否存在,如果是,則繼續(xù)執(zhí)行步驟S203;否 則,創(chuàng)建日志文件,再執(zhí)行步驟S203;步驟S 203、査找所述日志文件的標(biāo)志位并賦值給所述全局計(jì)數(shù)變量其中,該標(biāo)志位所含數(shù)據(jù)信息為該標(biāo)志位的前一日志記錄在該日志文件中的序號(hào),實(shí)際上相當(dāng)于將該序號(hào)賦給全局計(jì)數(shù)變量;步驟S204、將文件讀寫指針移動(dòng)至所述日志記錄之后。主程序開啟日志任務(wù)后,日志任務(wù)首先初始化消息隊(duì)列和全局計(jì)數(shù)變量,然后打開日志文件。若日志文件不存在,則創(chuàng)建日志文件;若日志文件存在, 則查找標(biāo)志位,則標(biāo)志位前的那條記錄便為設(shè)備上一次運(yùn)行時(shí)的最后一條日志 記錄。讀出該條記錄在該日志文件中的序號(hào)并賦值給全局計(jì)數(shù)變量,然后移動(dòng) 文件讀寫指針到該條記錄后。完成以上操作后,日志任務(wù)初始化完成,準(zhǔn)備從 消息隊(duì)列中接收其它任務(wù)發(fā)送過來的日志消息。在優(yōu)選的實(shí)施例中,本發(fā)明還可以根據(jù)需要將日志文件上傳到遠(yuǎn)程操作維護(hù)終端,上報(bào)過程包括以下步驟步驟301、遠(yuǎn)程操作維護(hù)終端向嵌入式設(shè)備發(fā)出上報(bào)命令。這種上報(bào)方式為被動(dòng)方式遠(yuǎn)程操作維護(hù)終端通過發(fā)送命令給設(shè)備,通知設(shè)備按指定格式制 作文件,設(shè)備在接收到此消息后制作相應(yīng)的文件并上傳到遠(yuǎn)程操作維護(hù)終端。步驟302、嵌入式設(shè)備建立上報(bào)文件,按照設(shè)定格式寫入文件頭和日志制作時(shí)間。步驟303、從所述日志文件中讀取日志記錄并寫入所述上報(bào)文件中。 步驟304、將所述上傳文件上傳至遠(yuǎn)程操作維護(hù)終端。 需要說明的是,制作好的相應(yīng)格式的文件可以通過文件傳輸協(xié)議FTP (File Transfer Protocal)上傳,也可以通過其它網(wǎng)絡(luò)方式進(jìn)行上傳,F(xiàn)TP為本發(fā)明的優(yōu)選實(shí)施方式。其中,步驟S303的過程具體包括首先,打開對(duì)應(yīng)的日志文件,搜索所述 標(biāo)志位,將所述文件讀寫指針移動(dòng)到所述標(biāo)志位之后;然后,依次讀取所述日 志文件中的日志記錄,并將讀到的日志記錄寫入所述上報(bào)文件;當(dāng)讀取日志文 件的最后一條日志記錄之后,將所述文件讀寫指針移動(dòng)到日志文件的文件頭, 繼續(xù)讀取所述日志文件中的日志記錄;當(dāng)再次讀取到標(biāo)志位時(shí),停止讀取所述 日志文件中的日志記錄,上報(bào)文件制作完成。此時(shí)新文件中的日志信息應(yīng)該是 按照指定格式編排的,以日志產(chǎn)生時(shí)間為順序來存放的,有利于工作人員依據(jù) 新制作的日志文件進(jìn)行故障分析和診斷。這種上報(bào)方式為主動(dòng)方式日志在某種設(shè)定的條件下觸發(fā)制作日志文件的 操作并上傳到遠(yuǎn)程操作維護(hù)終端。實(shí)施例這里假設(shè)設(shè)備在運(yùn)行過程中將會(huì)發(fā)送兩種格式的日志消息調(diào)試消息和異 常消息,兩種日志消息的數(shù)據(jù)結(jié)構(gòu)分別為數(shù)據(jù)結(jié)構(gòu)一和數(shù)據(jù)結(jié)構(gòu)二。并要求將 調(diào)試日志消息存儲(chǔ)為文本文件a.txt,用來記錄設(shè)備運(yùn)行過程的狀態(tài)信息,需要 上報(bào)到遠(yuǎn)程操作維護(hù)終端;將異常日志消息按xml文件格式要求存儲(chǔ)為xml文 件b.xml,用來記錄設(shè)備運(yùn)行過程中的異常信息,不需要上報(bào)到遠(yuǎn)程操作維護(hù)終 端。假設(shè)日志文件所允許記錄的最大記錄數(shù)都為5000條。首先,數(shù)據(jù)結(jié)構(gòu)一和二定義如下<formula>formula see original document page 12</formula>INT32 id; INT32 level; INT32 code; INT8 *fmt;INT32 arg [MAX一LOG一ARGS];LOG—MSG;數(shù)據(jù)結(jié)構(gòu)二typedef structINT8 kind; INT32 code; INT8 file[40]; INT32 line; INT32 state; INT8 times[40]; INT8 *info; }EXC—MSG;另外用于此例的變量定義及注釋如下Char strBuf[1024]; / /消息隊(duì)列接收緩沖區(qū) LOG—MSG * pLogTxt = NULL; / /調(diào)試日志消息指針 EXC—MSG * plogXml = NULL; / /異常日志消息指針 lnt giNum =0; / /全局計(jì)數(shù)變量當(dāng)有日志消息到達(dá)時(shí),日志任務(wù)首先從消息隊(duì)列中接收該消息并放到接收緩沖區(qū)strBuf中。根據(jù)strBuf的第一個(gè)字節(jié)即數(shù)據(jù)結(jié)構(gòu)的INT8 kind字段來判 斷該條消息屬于哪種類型的日志消息。若是調(diào)試消息,則通過指針的強(qiáng)制轉(zhuǎn)換 將pLogTxt指針指向strBuf;若是異常消息,則通過指針的強(qiáng)制轉(zhuǎn)換將plogXml 指針指向strBuf。這樣便可以很方便的獲取對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的對(duì)應(yīng)字段。若日志任務(wù)收到的是調(diào)試消息,則首先檢査日志信息的級(jí)別設(shè)置,并根據(jù) 檢査結(jié)果和該條消息的id、 level值來判斷是否需要上報(bào)到遠(yuǎn)程操作維護(hù)終端。 若需要上報(bào),則通過socket上報(bào)到遠(yuǎn)端的操作維護(hù)終端,然后檢查全局計(jì)數(shù)變 量giNum是否達(dá)到所允許的最大記錄條數(shù);若不需要進(jìn)行上報(bào),則直接檢査全 局計(jì)數(shù)變量giNum的值是否達(dá)到所允許的最大記錄條數(shù)。如果giNum大于該值, 則將移動(dòng)文件讀寫指針到日志文件頭處并將全局計(jì)數(shù)變量giNum清零后作加一 操作;如果giNum不大于該值,則不移動(dòng)文件讀寫指針。完成文件讀寫指針的 定位后,將調(diào)試消息按照指定格式寫入日志文件,并將標(biāo)志位giNum轉(zhuǎn)換成字 符串,寫到該條日志記錄后。然后將文件讀寫指針相對(duì)當(dāng)前位置向前移動(dòng),移 動(dòng)的大小為該標(biāo)志位所轉(zhuǎn)換成的字符串的長度。例如,giNum=123,轉(zhuǎn)換成字 符串后為"123"。將"123"寫入到日志消息后,文件讀寫指針相對(duì)當(dāng)前讀寫位置向 前移動(dòng)3個(gè)字節(jié)的長度。如果giNum=1222,轉(zhuǎn)換成字符串后為"1222"。將"1222" 寫入到日志消息后,文件讀寫指針相對(duì)當(dāng)前讀寫位置向前移動(dòng)4個(gè)字節(jié)的長度。 這樣在記錄下一條日志消息時(shí)便會(huì)覆蓋掉本次寫入的標(biāo)志位。指針移動(dòng)完成后, 則該條調(diào)試消息處理結(jié)束,繼續(xù)開始下一條消息的接收處理。若日志任務(wù)收到的是異常消息,則直接檢査全局計(jì)數(shù)變量giNum的值是否 達(dá)到所允許的最大記錄數(shù)。如果不大于該值,則不移動(dòng)文件讀寫指針;如果大 于該值,則將移動(dòng)文件讀寫指針到日志文件頭處并將全局計(jì)數(shù)變量giNum清零, 然后作加一操作;完成文件讀寫指針的定位后,通過操作pLogXml指針取得該 條日志消息中各個(gè)字段的值,并根據(jù)xml的文件格式要求將這些字段的值寫入 到日志文件中。然后將標(biāo)志位giNum轉(zhuǎn)換成字符串,寫到該條日志記錄后,并 將文件讀寫指針相對(duì)當(dāng)前位置向前移動(dòng),移動(dòng)的大小為該標(biāo)志位所轉(zhuǎn)換成的字 符串的長度。這樣在記錄下一條日志消息時(shí)便會(huì)覆蓋掉本次寫入的標(biāo)志位。指針移動(dòng)完成后,則該條異常消息處理結(jié)束,繼續(xù)開始下一條消息的接收處理。當(dāng)設(shè)備接收到遠(yuǎn)程操作維護(hù)終端發(fā)送的日志文件上報(bào)命令后,開始制作日志文件并上傳。假設(shè)要將異常日志制作成c.xml文件并上傳到遠(yuǎn)程操作維護(hù)終 端。首先新建文件c.xml,按照x m 1文件的格式寫入x m 1文件頭及該日志文 件制作時(shí)間等相關(guān)字段。打開異常日志文件,搜索標(biāo)志位,并將文件讀寫指針 移動(dòng)到標(biāo)志位后。這樣該標(biāo)志位后的第一條記錄便為異常日志文件中最早的一 條日志記錄。依次讀取日志文件中的記錄并將讀到的記錄寫入文件c.xml。當(dāng)讀 到日志文件尾時(shí),移動(dòng)文件讀寫指針到文件頭,繼續(xù)讀取,直到再次遇到標(biāo)志 位,表明日志文件己讀取完成。此時(shí)文件c.xml所記錄的日志信息應(yīng)該是以xm l文件格式存儲(chǔ),以記錄產(chǎn)生的先后為順序排列的。文件c.xml制作完成后,通 過ftp將此文件上傳到遠(yuǎn)程操作維護(hù)終端,日志文件制作上傳流程完成。以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì), 但并不能因此而理解為對(duì)本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域 的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和 改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附 權(quán)利要求為準(zhǔn)。
權(quán)利要求
1. 一種日志管理的實(shí)現(xiàn)方法,其特征在于,該方法包括以下步驟A、根據(jù)日志消息的類型定義對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);B、接收日志信息到接收緩沖區(qū),根據(jù)所述日志信息的類型定義一個(gè)該類型的指針,并將所述指針指向接收緩沖區(qū);C、將全局計(jì)數(shù)變量值加一并檢測(cè)當(dāng)前的全局計(jì)數(shù)變量值是否大于最大記錄條數(shù)值,如果是,則將全局計(jì)數(shù)變量清零后加一,執(zhí)行步驟D;否則,將文件讀寫指針保持原位,執(zhí)行步驟D;D、將處理后的所述日志信息按照設(shè)定格式寫進(jìn)日志文件形成日志記錄;將所述全局計(jì)數(shù)變量的值轉(zhuǎn)換成字符串,并作為該條記錄的標(biāo)志位寫入該條日志記錄之后。
2、 根據(jù)權(quán)利要求1所述的一種日志管理的實(shí)現(xiàn)方法,其特征在于,所述步驟A之前還包括步驟A1、初始化消息隊(duì)列和全局計(jì)數(shù)變量;A2、檢測(cè)日志文件是否存在,如果是,則繼續(xù)執(zhí)行步驟A3;否則,創(chuàng)建日志文件,再執(zhí)行步驟A3;A3、査找所述日志文件的標(biāo)志位并賦值給所述全局計(jì)數(shù)變量;A4、將文件讀寫指針移動(dòng)至所述日志記錄之后。
3、 根據(jù)權(quán)利要求1所述的一種日志管理的實(shí)現(xiàn)方法,其特征在于,所述步驟B具體包括步驟B1、所述消息隊(duì)列接收日志信息;B2、所述消息隊(duì)列將日志信息按優(yōu)先級(jí)從高到低的順序發(fā)送到接收緩沖區(qū); B3、根據(jù)所述日志信息的類型定義一個(gè)該類型的指針,并將所述指針指向接收緩沖區(qū)。
4、 根據(jù)權(quán)利要求1所述的一種日志管理的實(shí)現(xiàn)方法,其特征在于,所述步 驟B中接收的日志信息類型為調(diào)試信息或異常信息。
5、 根據(jù)權(quán)利要求3所述的一種日志管理的實(shí)現(xiàn)方法,其特征在于,所述步驟B3具體過程為根據(jù)緩沖區(qū)第一個(gè)字節(jié)的數(shù)據(jù)內(nèi)容來檢測(cè)日志信息的類型,并將該指針通 過強(qiáng)制類型轉(zhuǎn)換指向接收緩沖區(qū)。
6、 根據(jù)權(quán)利要求3所述的一種日志管理的實(shí)現(xiàn)方法,其特征在于,所述步驟B3之后還包括步驟B4、檢查日志上報(bào)的等級(jí)設(shè)置,并根據(jù)所述檢査結(jié)果和該日志信息的上報(bào) 級(jí)別及所屬模塊判斷是否需要上報(bào)到遠(yuǎn)程操作維護(hù)終端,如果是,則將所述曰志信息上報(bào)到遠(yuǎn)程操作維護(hù)終端,執(zhí)行步驟C;否則直接執(zhí)行步驟C。
7、 根據(jù)權(quán)利要求1 6中任一項(xiàng)所述的一種日志管理的實(shí)現(xiàn)方法,其特征在于,所述步驟D之后還包括步驟E、將文件讀寫指針向前移動(dòng),移動(dòng)長度的大小為所述字符串長度的大小。
8、 根據(jù)權(quán)利要求7所述的一種日志管理的實(shí)現(xiàn)方法,其特征在于,所述步驟E之后還包括步驟E1、遠(yuǎn)程操作維護(hù)終端向嵌入式設(shè)備發(fā)出上報(bào)命令;E2、嵌入式設(shè)備建立上報(bào)文件,按照設(shè)定格式寫入文件頭和日志制作時(shí)間; E3、從所述日志文件中讀取日志記錄并寫入所述上報(bào)文件中;E4、將所述上傳文件上傳至遠(yuǎn)程操作維護(hù)終端。
9、 根據(jù)權(quán)利要求8所述的一種日志管理的實(shí)現(xiàn)方法,其特征在于,所述步驟E3具體包括以下步驟E31、打開對(duì)應(yīng)的日志文件,搜索所述標(biāo)志位,將所述文件讀寫指針移動(dòng)到 所述標(biāo)志位之后;E32、依次讀取所述日志文件中的日志記錄,并將讀到的日志記錄寫入所述 上報(bào)文件;E33、讀取日志文件的最后一條日志記錄之后,將所述文件讀寫指針移動(dòng)到 日志文件的文件頭,繼續(xù)讀取所述日志文件中的日志記錄;E34、再次讀取到標(biāo)志位時(shí),停止讀取所述日志文件中的日志記錄,上報(bào)文件制作完成。
10、根據(jù)權(quán)利要求8所述的一種日志管理的實(shí)現(xiàn)方法,其特征在于,所述 步驟E4具體過程為嵌入式設(shè)備將所述上傳文件通過文件傳輸協(xié)議FTP上傳至遠(yuǎn)程操作維護(hù)終端。
全文摘要
本發(fā)明公開了一種日志管理的實(shí)現(xiàn)方法,該方法包括以下步驟A.根據(jù)日志消息的類型定義對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);B.接收日志信息到接收緩沖區(qū),根據(jù)所述日志信息的類型定義一個(gè)該類型的指針,并將所述指針指向接收緩沖區(qū);C.將全局計(jì)數(shù)變量值加一并檢測(cè)當(dāng)前的全局計(jì)數(shù)變量值是否大于最大記錄條數(shù)值,如果是,則將全局計(jì)數(shù)變量清零后加一,執(zhí)行步驟D;否則,將文件讀寫指針保持原位,執(zhí)行步驟D;D.將處理后的所述日志信息按照設(shè)定格式寫進(jìn)日志文件形成日志記錄;將所述全局計(jì)數(shù)變量的值轉(zhuǎn)換成字符串,并作為該條記錄的標(biāo)志位寫入該條日志記錄之后。本發(fā)明的實(shí)現(xiàn)方法可根據(jù)需要靈活的設(shè)計(jì)所需要的日志格式,操作簡(jiǎn)單方便、易實(shí)現(xiàn),形式靈活多樣可擴(kuò)展性好。
文檔編號(hào)H04L12/26GK101272276SQ20081006666
公開日2008年9月24日 申請(qǐng)日期2008年4月22日 優(yōu)先權(quán)日2008年4月22日
發(fā)明者平 沈, 鹿丙杰 申請(qǐng)人:深圳國人通信有限公司