色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

調試神器--Rlog

Rice嵌入式開發技術分享 ? 來源:Rice 嵌入式開發技術分享 ? 作者:Rice 嵌入式開發技 ? 2023-08-21 17:17 ? 次閱讀

概述

在現代軟件開發中,日志記錄系統是不可或缺的一部分。它不僅可以幫助開發人員在應用程序中定位和解決問題,還可以用于監控、性能分析、安全審計等方面。本文將介紹日志記錄系統的基本概念、重要性以及如何構建一個高效的日志記錄系統。

為什么需要日志記錄系統?

日志是應用程序在運行時生成的文本消息,用于記錄關鍵事件、錯誤信息、警告以及其他有價值的信息。日志記錄系統的作用如下:

故障排除與問題定位:當應用程序出現問題時,日志可以提供關于發生了什么、在哪里發生以及為什么發生的關鍵信息,幫助開發人員快速定位和解決問題。

性能分析:通過記錄關鍵操作的時間戳和執行時間,開發人員可以分析應用程序的性能瓶頸,并進行優化。

監控與報警:監控系統可以分析日志,實時監控應用程序的健康狀態。當出現異常情況時,可以觸發報警機制,使團隊可以及時采取措施。

安全審計:記錄安全相關事件和訪問,以便進行后續的審計和分析。

構建日志記錄系統的關鍵步驟

日志級別與分類:日志級別包括調試(Debug)、信息(Info)、警告(Warning)、錯誤(Error)等。不同級別的日志用于不同目的,例如調試時使用調試日志來追蹤代碼執行,而錯誤日志用于記錄嚴重的問題。選擇合適的日志級別可以避免日志信息過于冗雜或過于稀少。

日志格式與結構:一個良好的日志格式應包括時間戳、日志級別、模塊/組件名以及具體的日志消息。統一的格式使得日志易于閱讀和分析。例如:[時間戳] [日志級別] [模塊名] - 日志消息

異步日志寫入:為避免阻塞應用程序的正常執行,可以采用異步日志寫入方式。日志消息被緩沖并在適當的時機寫入磁盤,從而提高應用程序的性能。

日志存儲與滾動:考慮使用滾動策略,定期歸檔或刪除舊的日志文件,以免日志文件無限增大。選擇適當的存儲方式,如本地文件、數據庫或云存儲。

上下文信息:除了基本的日志信息外,還可以在日志中添加上下文信息,如用戶ID、請求ID、會話ID等。這些信息有助于在復雜的分布式系統中跟蹤請求流程。

敏感信息與安全:避免將敏感信息(如密碼、API密鑰)寫入日志。同時,實施權限控制,限制對日志文件的訪問,確保敏感信息不被濫用。

日志分析與可視化:利用日志分析工具或平臺,對日志進行聚合、搜索和可視化分析。這有助于發現模式、趨勢以及潛在問題。

Rlog組件

Rlog作為一款高性能的純C語言日志組件,為開發人員提供了一種輕松、靈活且可定制的日志記錄解決方案。其簡單的接口和插件擴展功能使得它適用于各種不同規模和類型的項目。無論是小型應用程序還是大型系統,Rlog都能為您提供高效的日志記錄支持,幫助您更好地理解和管理應用程序的運行狀態。

純C語言開發:Rlog完全由C語言編寫,因此具有廣泛的可移植性和兼容性。它可以輕松地集成到各種C語言項目中。

簡單的接口:Rlog提供了簡單、直觀的接口,使開發人員可以輕松地在代碼中插入日志記錄語句。這使得調試和問題定位變得更加容易。

靈活可配置:Rlog允許開發人員根據項目需求進行高度自定義的配置。您可以定義日志級別、格式、輸出位置等,以滿足不同應用場景的需求。

插件擴展:一個突出的特點是Rlog的插件式擴展輸出端點的能力。這意味著您可以將日志消息輸出到各種不同的地方,如文件、終端、遠程服務器等,以適應多樣化的需求。

Rlog特性

支持用戶自定義輸出端點(例如:串口終端、網絡中斷、Flash...),輸出端點以插件形式自定義擴展。

日志內容可包含日志等級、時間戳、行號,函數信息,文件信息;

支持多種操作系統RT-ThreadLinux...),也支持裸機平臺;

日志輸出支持:printf原始格式,日志等級輸出,hexdump輸出;

Rlog目錄結構

. ├──example │├──rlog_linux_adapter.c/*linux環境下的適配接口*/ │└──rlog_rtt_adapter.c/*rt-thread環境下的適配接口*/ ├──include/ │├──rlog_adapter.h/*rlog適配描述*/ │└──rlog.h/*rlog對外接口*/ ├──main.c/*rlog的測試樣例*/ ├──Makefile/*linux環境rlog構建Makefile*/ ├──plug-in/*輸出端點插件的存放路徑*/ ├──SConscript/*rt-thread環境rlog構建腳本*/ └──src ├──rlog.c/*rlog核心代碼*/ ├──rlog_def.h/*rlog核心代碼使用的定義*/ └──rlog_utils.c/*rlog使用的C庫接口*/

Rlog靈活配置

靜態配置:

靜態配置采用宏定義的方式,用戶可直接修改rlog_adapter.h頭文件的宏定義,就可以修正相關配置;

靜態配置的管控權限比動態配置的高,例如:靜態配置設置日志輸出總開關為關閉,動態配置設置日志輸出使能,日志已經無法輸出。

配置描述如下:

/*Enablelogoutput*/ #defineRLOG_OUTPUT_ENABLE1 /*Setlogoutputlevel,rang:fromRLOG_LEVEL_ASSERTtoRLOG_LEVEL_VERBOSE*/ #defineRLOG_OUTPUT_LEVELRLOG_LEVEL_VERBOSE /*Enablelogcolor*/ #defineRLOG_COLOUR_ENABLE1 /*Enablelogcolor*/ #defineRLOG_TIME_ENABLE1 /*Supportlogincludedirectory*/ #defineRLOG_DIRECTORY_ENABLE1 /*Supportlogincludefuntiongname*/ #defineRLOG_FUNCTION_ENABLE1 /*Supportlogincludelinenumber*/ #defineRLOG_LINE_ENABLE1 /*Buffersizeforeveryline'slog*/ #defineRLOG_LINE_BUFF_LEN128 /*Outputlinenumbermaxlength*/ #defineRLOG_LINE_NUM_SIZE5 /*Outputnewlinesign*/ #defineRLOG_NEWLINE_SIGN"rn" /*Enableassertcheck*/ #defineRLOG_ASSERT_ENABLE1 /*Logfunction.defaultFDB_PRINTmacroisprintf()*/ #defineRLOG_PRINT(...)printf(__VA_ARGS__)

描述
RLOG_OUTPUT_ENABLE rlog日志輸出總開關
RLOG_OUTPUT_LEVEL rlog日志輸出等級總開關
RLOG_COLOUR_ENABLE rlog日志等級輸出帶顏色開關
RLOG_TIME_ENABLE rlog日志等級輸出帶時間開關
RLOG_DIRECTORY_ENABLE rlog日志等級輸出帶文件路徑開關
RLOG_FUNCTION_ENABLE rlog日志等級輸出帶函數名開關
RLOG_LINE_ENABLE rlog日志等級輸出帶行號開關
RLOG_LINE_BUFF_LEN rlog每一條日志最大長度
RLOG_LINE_NUM_SIZE rlog日志等級輸出行號的最大長度
RLOG_NEWLINE_SIGN rlog日志換行符格式
RLOG_ASSERT_ENABLE rlog使用assert功能
RLOG_PRINT(...) rlog中斷輸出設置,如rt-thread采用rt_kprintf, linux采用printf

動態配置:

動態配置采用接口的方式,用戶通過調用rlog.h頭文件提供的接口設置;

動態配置的管控權限比靜態配置的低,例如:靜態配置設置日志輸出總開關為關閉,動態配置設置日志輸出使能,日志已經無法輸出。

/** *RLogoutputenable * *@paramenabletrue:enableoutput,false:disableoutput */ voidrlog_enable(boolenable); /** *RLogoutputcolorenable * *@paramenabletrue:enableoutputcolor,false:disableoutputcolor */ voidrlog_color_enable(boolenable); /** *RLogleveloutputformatsetting * *@paramlevelloglevel *@paramformatlogformat */ voidrlog_level_fmt_set(rlog_lvl_tlevel,intformat); /** *RLogleveloutputformatsetting * *@paramlevelloglevel *@paramformatlogformat * *@returnresulttrue:supportedformat,false:unsupportedformat */ boolrlog_level_fmt_get(rlog_lvl_tlevel,intformat); /** *RLogfilterthecontentoftheloglevel * *@paramlevelloglevel */ voidrlog_level_filter_set(rlog_lvl_tlevel);

配置函數 描述
rlog_enable rlog日志輸出使能開光
rlog_color_enable rlog日志等級輸出帶顏色開關
rlog_level_fmt_set rlog日志等級輸出格式設置,RLOG_FMT_LVL/RLOG_FMT_TAG/RLOG_FMT_TIME/RLOG_FMT_DIR/RLOG_FMT_FUNC/RLOG_FMT_LINE
rlog_level_fmt_get rlog日志等級輸出格式獲取
rlog_level_filter_set rlog日志等級輸出過濾設置

Rlog適配

不同平臺的適配方式不同,所以為rlog核心層提供了統一的接口,適配接口如下:

voidrlog_adapter_init(void); voidrlog_adapter_deinit(void); voidrlog_lock(void); voidrlog_unlock(void); char*rlog_get_time(void); voidrlog_output(constchar*log,uint16_tlen);

適配函數 描述
rlog_adapter_init rlog適配層初始化,如端點插件初始化
rlog_adapter_deinit rlog適配層去初始化,如端點插件去初始化
rlog_lock rlog日志鎖,為rlog提供線程安全
rlog_unlock rlog日志解鎖,為rlog提供線程安全
rlog_get_time rlog日志提供時間
rlog_output rlog日志輸出適配接口

linux下的適配方式:

staticpthread_mutex_tmutex; voidrlog_lock(void) { pthread_mutex_lock(&mutex); } voidrlog_unlock(void) { pthread_mutex_unlock(&mutex); } char*rlog_get_time(void) { #defineTIME_STR_SIZE32 staticchartime_str[TIME_STR_SIZE]={0}; time_ttmp; structtm*timp; time(&tmp); timp=localtime(&tmp); memset(time_str,0,TIME_STR_SIZE); rlog_snprintf(time_str,TIME_STR_SIZE,"%04d-%02d-%02d%02d:%02d:%02d", (1900+timp->tm_year),(1+timp->tm_mon),timp->tm_mday, timp->tm_hour,timp->tm_min,timp->tm_sec); returntime_str; } voidrlog_output(constchar*log,uint16_tlen) { RLOG_PRINT("%.*s",len,log); } voidrlog_adapter_init(void) { pthread_mutex_init(&mutex,NULL); } voidrlog_adapter_deinit(void) { pthread_mutex_destroy(&mutex); }

Rlog驗證

rlog驗證以linux環境為例,Rlog開源路徑:https://gitee.com/RiceChen0/rlog

rlog驗證操作流程:

youyeetoo@youyeetoo:~$gitclonehttps://gitee.com/RiceChen0/rlog.git youyeetoo@youyeetoo:~/rlog$make youyeetoo@youyeetoo:~/rlog$./output/rlog_1.0.0 RLogVersion:v1.0.0 RLogAuthor:RiceChen RLogContact:https://gitee.com/RiceChen0/rlog Youyeetoo (2023-08-1518:53:27)[main.cmain:12]I/RLOG:Youyeetoo RLOGHexDump--Title:RLOG,len:9 00000000:596F75796565746F6FYouyeetoo

rlog驗證效果:

8925ba2c-4003-11ee-852b-dac502259ad0.png

Rlog總結

rlog提供了簡單易用的日志系統,采用插件方式,提供靈活的輸出端點的設置。

rlog的原型參考了開源項目:https://gitee.com/RT-Thread-Mirror/EasyLogger。

rlog不依賴C庫,rlog_utils.c中,重新定義了用到C庫接口。接口參考了開源項目:https://gitee.com/RT-Thread-Mirror/rt_vsnprintf_full。

下一步計劃:

rlog提供不同場景下的插件,網絡中斷,文件存儲,異步操作。

rlog將提供對應的上位機,上位機功能將集成到RTOOLS中,RTOOLS開源路徑:https://gitee.com/RiceChen0/rtools。

89352804-4003-11ee-852b-dac502259ad0.png

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8575

    瀏覽量

    151023
  • 監控
    +關注

    關注

    6

    文章

    2204

    瀏覽量

    55174
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136696
收藏 人收藏

    評論

    相關推薦

    PCB參數計算神器分享

    提前祝小伙伴們中秋節快樂。今天分享一個PCB計算神器,功能非常齊全。
    發表于 09-09 09:31 ?1294次閱讀

    寢室斷電上網神器

    ` 本帖最后由 yiyi200712new 于 2013-5-23 08:26 編輯 寢室斷電上網神器:斷電后依舊可以給路由器供電、手機充電。。。。板子正面圖USB:給手機充電紅燈:鉛蓄電池欠壓
    發表于 05-21 00:43

    直流電機EMI抑制神器

    直流電機EMI抑制神器
    發表于 08-05 16:04

    【NanoPi NEO試用體驗】神器開箱詳解

    成那么多元器件,免不了過孔走線,元器件排版布局也算合理,總的來說工藝方面也是不錯,店家還為每塊板子配備了鋁制散熱片,避免板子過熱而縮短使用壽命,確實值得稱贊。要調試板子,當然少不了這個神器,串口模塊,這個
    發表于 11-01 21:13

    定時澆花神器供電問題

    各位老師好!請教一個問題,我在網上買了一個定時給花澆水的神器,4節7號電池供電。我能否把手機充電器的輸出端剪一下,與電池盒連起來供電?這樣不用擔心電池沒電,也節省費用。謝謝!
    發表于 07-28 12:36

    快速開發快應用應該了解的5個神器

    想快速開發快應用?你需要知道這5大神器
    發表于 02-13 10:10

    變量命名神器

    中國程序員開發的神奇網站:變量命名神器
    發表于 05-31 06:44

    串口神器sscom5.13.1資源分享

    在附件中是串口神器sscom5.13.1,大家可以點擊下面的下載按鈕直接下載
    發表于 11-13 11:01

    NXP電力變換的神器

    其實很早之前在公眾號給大家推送過NXP的這個神器,freeMaster,這個工具其實已經好多年了,在最早的飛思卡爾早期就存在,一直是工程師調試電機,電力變換的神器,確實好...
    發表于 09-17 06:48

    如何利用rk3399調試RM500Q模塊以便正常撥號上網呢

    按照模塊廠家提供的資料添加相關驅動以及配置不再贅述,主要是調試過程中系統層面有一個問題,首先看log:D use-Rlog/RLOG-RIL RILU: find quectel module
    發表于 05-23 11:41

    求款MCU430AFE253讀寫神器

    求款MCU430AFE253讀寫神器
    發表于 09-19 13:07

    嵌入式調試神器——MicroLab?使用指南

    全新的串口/網絡調試服務及關聯模塊” “發送歷史永久保存及支持別名” “串口/網絡動態指令編程” “串口/網絡虛擬示波器”
    發表于 05-09 15:09 ?854次閱讀
    嵌入式<b class='flag-5'>調試</b><b class='flag-5'>神器</b>——MicroLab?使用指南

    無所不知的神器構建

    電子發燒友網站提供《無所不知的神器構建.zip》資料免費下載
    發表于 07-04 11:22 ?0次下載
    無所不知的<b class='flag-5'>神器</b>構建

    如何構建一個高效的日志記錄系統 Rlog組件的應用

    Rlog作為一款高性能的純C語言日志組件,為開發人員提供了一種輕松、靈活且可定制的日志記錄解決方案。其簡單的接口和插件擴展功能使得它適用于各種不同規模和類型的項目。無論是小型應用程序還是大型系統,Rlog都能為您提供高效的日志記錄支持,幫助您更好地理解和管理應用程序的運行
    發表于 08-16 12:45 ?800次閱讀
    如何構建一個高效的日志記錄系統 <b class='flag-5'>Rlog</b>組件的應用

    介紹一款基于java的滲透測試神器-CobaltStrike

    Cobalt Strike是一款基于java的滲透測試神器,常被業界人稱為CS神器
    的頭像 發表于 01-16 09:16 ?964次閱讀
    介紹一款基于java的滲透測試<b class='flag-5'>神器</b>-CobaltStrike
    主站蜘蛛池模板: 人禽l交视频在线播放 视频| freevideoshd| 大香网伊人久久综合观看| 久99视频精品免费观看福利| 热久久国产欧美一区二区精品| 亚洲日韩精品AV中文字幕| 国产AV精品无码免费看| 嗯啊不要老师| 曰本真人00XX动太图| 国产免费看片| 日本另类xxxx| 99re在这里只有精品| 九九免费的视频| 亚洲AV永久无码精品澳门| 动漫美女喷水| 亲胸吻胸添奶头GIF动态图免费 | 亚洲精品视频在线观看视频| 补课H湿 1V1 PLAY| 男生插女生下体| 中文字幕午夜福利片| 妓女嫖客叫床粗话对白| 校花在公车上被内射好舒| 攻把受做得合不拢腿play| 青草视频久久| 99视频福利| 免费三级现频在线观看| 在线观看视频一区| 久久不射网| 亚洲最大日夜无码中文字幕| 国产在线高清亚洲精品一区| 五花大绑esebdsm国产| 国产高清-国产av| 三级成年网站在线观看| 波多野结衣教师系列6| 欧美最猛性xxxxx亚洲精品| 99久久精品国产国产毛片| 免费 高清 中文在线观看| 51国产偷自视频在线视频播放| 久久er99热精品一区二区| 亚洲中文字幕无码爆乳APP| 精品国产免费第一区二区|