C++工業設備日誌記錄系統

在作設備開發的時候,是否常常存在如下疑問:git

1.在開發過程當中,程序沒有發生崩潰,但在壓力測試過程當中卻發生了崩潰,抓狂崩潰發生在哪?github

2.設備爲什麼不按照設想的情景運行,當時的場景已經沒法復現,抓狂該如何定位問題所在?json

這時候,須要引入日誌系統。函數

而在儀器設備行業,大多數狀況,須要日誌系統,主要存在兩個需求:測試

1。用於追蹤程序崩潰的大體位置spa

2。用於記錄儀器運行過程當中數據調試

(我的認爲目前大型設備基本也只有這兩個需求)日誌

而儀器的日誌特色是:blog

1。數據量不大,一天1~10個G就不少了開發

2。存在多個子系統,須要分系統記錄

3。可以按日期滾動記錄在文件中

4。功能(例如開關)可不斷線實時加載

5。小型化,儘量的小

爲了知足上述需求和特色,開發了日誌庫,源碼地址:GL4A_logger

目的:

        用於工業設備問題追蹤和分析。

        用於在運行和調試過程當中,記錄崩潰所在的大體位置。

        用於在平常運行過程當中,監控必要的數據。

特色:

        記錄時間小於1ms;

        實時記錄,可用於崩潰追蹤;

        緩衝記錄,可用於記錄平常運行數據;

        記錄文件名和行號,並支持格式化輸出;

        支持運行過程當中實時重加載配置;

        可記錄在控制檯中,自由選擇功能開關;

        可記錄在文件中,自由選擇功能開關;

        可自由添加組件/模塊,分模塊記錄,模塊可自由開關;

        可自由配置日誌等級。

組成:

        組件、日誌記錄器、等級

        組件可由用戶增刪改,組件可自由開關,若是某個組件關閉,那麼全部其掛載的日誌記錄器均不會對其進行日誌記錄。

        日誌記錄器分爲console控制檯日誌記錄、rolling滾動型日誌記錄、daily按天日誌記錄。三種日誌記錄器都可以自由開關,若是某種日誌記錄器被關閉,那麼全部此類型的日誌均不會被記錄。

        等級分爲trace和error,其中,error等級用於追蹤崩潰,trace用於平常數據記錄。全部error日誌均會在trace中備份記錄一份,主要用於保持trace數據上下文完整性。

        全部配置項均存在config文件夾中的配置文件GL4A_config.cfg中。

結構圖:

基本用法:

{

//引用頭文件

#include "GL4A_user.h"

// 在程序入口處,根據配置文件路徑,初始化日誌庫

eGL4A_init(GL4A_DEFAULT_CONFIG_DIR);

 

// M0組件函數入口處,記錄ERROR,並標識爲 IN(用於定位大體崩潰位置)

GL4A_ERROR_LOG("M0", __F__, __L__, "XXX函數,IN\n");

// 在中間必要時,記錄 TRACE,用於平常數據記錄

GL4A_TRACE_LOG("M0", __F__, __L__, "記錄數據!\n");

// M0組件函數入口處,記錄ERROR,並標識爲 OUT(用於定位大體崩潰位置)

GL4A_ERROR_LOG("M0", __F__, __L__, "XXX函數,OUT\n");

 

// 在程序出口處,關閉日誌庫

GL4A_close();

}

注:當程序發生崩潰時,相應函數入口ERROR IN會被記錄,但ERROR OUT不會被記錄,那麼,根據記錄的文件名和行號,便可定位崩潰發生的位置。

在記錄ERROR時,同時會在TRACE中備份記錄一份,用於保持TRACE記錄上下文的完整性。

基本函數

    主要包括兩個部分:

  1. 日誌庫初始化/關閉/重加載,平常輸出

        GL4A_init——用於初始化日誌庫

        GL4A_reloadConfig——用於實時重加載日誌配置文件

        GL4A_close——用於關閉日誌庫

        GL4A_TRACE_LOG——用於輸出TRACE日誌

        GL4A_ERROR_LOG——用於輸出ERROR日誌

  1. 日誌庫配置文件修改

        loadCfgFileToStruct——用於獲取配置文件結構體

        saveCfgFileFromStruct——用於將配置結構體保存到配置文件

        genConfigDefault——從新按照默認的配置結構體生成配置文件

        TotalCfgInfos——配置結構類,其中包含對配置項的基本操做

        注:若是對json格式比較瞭解,可直接對配置文件進行操做

        注:具體參見GL4A_user.h中GL4A命名空間,有很是詳盡的註釋

        源碼地址:GL4A_logger

相關文章
相關標籤/搜索