chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式軟件框架中一定不能缺少的日志管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

嵌入式應(yīng)用研究院 ? 來(lái)源:漫游嵌入式 ? 2023-04-19 09:14 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

日志分級(jí)概念

所謂日志分級(jí),就是將日志按照不同的層次,有選擇的輸出。

參考一些高級(jí)語(yǔ)言的分級(jí)日志設(shè)計(jì),我們根據(jù)對(duì)程序運(yùn)行信息的類(lèi)型把控,可以把日志分為5個(gè)級(jí)別DEBUG、INFO、WARN、ERROR、FATAL。

  • DEBUG:主要用于程序開(kāi)發(fā)測(cè)試階段的打印輸出,用于驗(yàn)證程序的設(shè)計(jì)邏輯是否滿足上層應(yīng)用的設(shè)計(jì)需求,在經(jīng)過(guò)測(cè)試檢驗(yàn)后的發(fā)布程序可以把它關(guān)掉。
  • INFO:這個(gè)級(jí)別的打印輸出是用來(lái)告訴測(cè)試人員或者開(kāi)發(fā)人員一些提示的信息
  • WRAN:這是一種警告的打印輸出,它一般是用來(lái)輸出諸如用戶輸入錯(cuò)誤的數(shù)據(jù)之類(lèi)的警告打印,這個(gè)級(jí)別的打印輸出在程序發(fā)布后也建議保留,以方面后期程序的維護(hù)追蹤。
  • ERROR:運(yùn)行出錯(cuò)的打印,這個(gè)級(jí)別的打印在發(fā)布的軟件不可關(guān)閉,否則無(wú)法從發(fā)布軟件中獲取一些反饋信息來(lái)指導(dǎo)我們新的程序優(yōu)化設(shè)計(jì)。
  • FATAL :程序運(yùn)行遇到這種級(jí)別的問(wèn)題,很難修復(fù),一般伴隨著程序的閃退或重啟,此時(shí)FATAL ERROR的打印則非常關(guān)鍵了,可以幫助我們定位到程序跑飛的原因,F(xiàn)ATAL ERROR級(jí)別的打印在任何時(shí)刻都不可以關(guān)閉。

為什么要有日志分級(jí)?

一個(gè)好的日志分級(jí)設(shè)計(jì),有助于我們快速定位問(wèn)題,主要是方便后續(xù)開(kāi)發(fā)和維護(hù)。在設(shè)計(jì)軟件的時(shí)候,可以根據(jù)問(wèn)題出現(xiàn)的輕重緩急,有決策的去添加分層信息,在必要的時(shí)候有針對(duì)性的打開(kāi)和關(guān)閉一些日志。

如何設(shè)計(jì)?

目前有兩種粗淺的設(shè)計(jì)策略,一種是或的關(guān)系,即各個(gè)日志等級(jí)彼此獨(dú)立,可以單獨(dú)打開(kāi)關(guān)閉;一種是順序打印,根據(jù)設(shè)置打印等級(jí),低于或者高于這個(gè)等級(jí)的才打印。

兩種沒(méi)有孰好孰壞,根據(jù)需要選擇合適策略即可。本文將以后者介紹。

設(shè)置打印級(jí)別

/*module_debug.h*/
/*1.設(shè)置打印級(jí)別*/
enum{
LOG_LEVEL_NONE,
LOG_LEVEL_DEBUG,
LOG_LEVEL_INFO,
LOG_LEVEL_WARN,
LOG_LEVEL_ERROR,
LOG_LEVEL_FATAL,
};

/*2.log打印重寫(xiě)*/
voidlog_fun(intlevel,constchar*opt,constchar*tag,intline,constchar*func,constchar*fmt,...);

/*3.各打印級(jí)別宏*/
/*
*@LOG_DBG
*/
#defineLOG_DBG(tag,fmt,...)
log_fun(LOG_LEVEL_DEBUG,"D",tag,__LINE__,__func__,fmt,##__VA_ARGS__)

/*
*@LOG_INFO
*/
#defineLOG_INFO(tag,fmt,...)
log_fun(LOG_LEVEL_INFO,"I",tag,__LINE__,__func__,fmt,##__VA_ARGS__)

/*
*@LOG_WARN
*/
#defineLOG_WARN(tag,fmt,...)
log_fun(LOG_LEVEL_WARN,"W",tag,__LINE__,__func__,fmt,##__VA_ARGS__)

/*
*@LOG_ERR
*/
#defineLOG_ERR(tag,fmt,...)
log_fun(LOG_LEVEL_ERROR,"E",tag,__LINE__,__func__,fmt,##__VA_ARGS__)

/*
*@LOG_FATAL
*/
#defineLOG_FATAL(tag,fmt,...)
log_fun(LOG_LEVEL_FATAL,"F",tag,__LINE__,__func__,fmt,##__VA_ARGS__)

注釋:... 和 __VA_ARGS__.省略點(diǎn)表示可變參數(shù),__VA_ARGS__表示可變參數(shù)的宏,是C99規(guī)范中新增的,用來(lái)替換宏定義中的可變參數(shù)(...); ##運(yùn)算符將兩個(gè)宏參數(shù)連接在一起。##__VA_ARGS__ 這里主要是為了解決當(dāng)__VA_ARGS__為空時(shí)編譯問(wèn)題,使用##防止編譯出錯(cuò)。

根據(jù)打印級(jí)別控制輸出范圍

/*module_debug.c*/
#include
#include
#include
#include
#include
#include

#include

intg_current_dbg_level=LOG_LEVEL_DEBUG;

voidlog_fun(intlevel,constchar*opt,constchar*tag,intline,constchar*func,constchar*fmt,...)
{
if(level>g_current_dbg_level){
charmsg_buf[20*1024];
va_listap;
va_start(ap,fmt);
sprintf(msg_buf,"%s/%s(%d):%s()",opt,tag,line,func);
vsprintf(msg_buf+strlen(msg_buf),fmt,ap);
fprintf(stderr,"%s
",msg_buf);/*輸出到標(biāo)準(zhǔn)輸出*/
va_end(ap);
}
}

/*設(shè)置打印級(jí)別*/
voidModuleDebugInit(intlevel)
{
g_current_dbg_level=level;
}

測(cè)試

/*main.c*/
#include
#defineTAG"test"

intmain(intargc,char*argv[])
{
  LOG_DBG(TAG,"log_debug%d
",LOG_LEVEL_DEBUG);
LOG_INFO(TAG,"log_info%d
",LOG_LEVEL_INFO);
LOG_WARN(TAG,"log_warn
");
LOG_ERR(TAG,"log_err
");
return0;
}

輸出打印信息:

I/test(61):main()log_info2

W/test(62):main()log_warn

E/test(63):main()log_err

其中I表示INFO、W表示W(wǎng)ARN、E表示ERROR;緊接著跟著模塊(test),也可以是文件名;然后是行號(hào)、函數(shù)名,最后是打印信息。

當(dāng)然具體打印信息和風(fēng)格用戶可以根據(jù)需要,自行設(shè)計(jì)。


			

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3832

    瀏覽量

    84412
  • 嵌入式軟件
    +關(guān)注

    關(guān)注

    4

    文章

    246

    瀏覽量

    27720
  • 日志
    +關(guān)注

    關(guān)注

    0

    文章

    145

    瀏覽量

    11001

原文標(biāo)題:嵌入式軟件框架中一定不能缺少的日志管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

文章出處:【微信號(hào):嵌入式應(yīng)用研究院,微信公眾號(hào):嵌入式應(yīng)用研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么叫嵌入式軟件

    需要給它設(shè)計(jì)套小小的可以嵌在里面的腦系統(tǒng),這個(gè)大腦有多聰明,就要看它的軟件了。這個(gè)嵌在里面的腦系統(tǒng)就是個(gè)
    發(fā)表于 04-20 08:45

    嵌入式系統(tǒng)串行設(shè)備管理怎么實(shí)現(xiàn)

    隨著微電子技術(shù)的發(fā)展,嵌入式系統(tǒng)的功能越來(lái)越強(qiáng)大,像 UART口、IrDA、USB、I2C以及SPI這些串行接口或設(shè)備同時(shí)存在于個(gè)嵌入式系統(tǒng)
    發(fā)表于 09-04 07:53

    嵌入式系統(tǒng)基礎(chǔ)階段的學(xué)習(xí)建議

    的。(4)至于嵌入式實(shí)時(shí)操作系統(tǒng)RTOS,一定不要開(kāi)始就學(xué),這樣會(huì)走很多彎路,也會(huì)使你對(duì)嵌入式系統(tǒng)
    發(fā)表于 10-29 07:36

    嵌入式框架

    1.overview 圖1-1 嵌入式框架嵌入式系統(tǒng)分為硬件以及軟件兩大部分,大多數(shù)人參與的是嵌入式
    發(fā)表于 10-27 08:26

    嵌入式低功耗電源管理框架的設(shè)計(jì)資料分享

    概述目標(biāo)本篇的目標(biāo)是介紹低功耗電源管理框架設(shè)計(jì)的概念理解低功耗管理的重要性理解如何開(kāi)發(fā)適合的低功耗管理框架理解如何去
    發(fā)表于 12-21 07:39

    嵌入式些日常小技巧分享

    拓寬自己的技術(shù)領(lǐng)域同時(shí)也要在像更加面向?qū)ο蠡蛘呤歉呒?jí)AI方向的算法也要有一定的涉獵,所以目前對(duì)于我而言Python和C++成了我在目前學(xué)習(xí)嵌入式操作系統(tǒng)的同時(shí)也要必須掌握的層技術(shù)又因
    發(fā)表于 12-21 08:07

    嵌入式軟件和非嵌入式軟件區(qū)別

    1.什么是嵌入式技術(shù)?嵌入式技術(shù)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ)的系統(tǒng)技術(shù)。它初起源于單片機(jī)技術(shù),是各類(lèi)數(shù)字化的電子、機(jī)電產(chǎn)品的核心,主要用于實(shí)現(xiàn)對(duì)硬件設(shè)備的控制、監(jiān)視或
    發(fā)表于 12-21 07:41

    嵌入式軟件建立統(tǒng)框架方法的研究

    介紹了嵌入式系統(tǒng)軟件的特點(diǎn)#說(shuō)明要建立統(tǒng)嵌入式軟件系統(tǒng)框架
    發(fā)表于 11-07 16:02 ?27次下載

    嵌入式系統(tǒng)框架----硬件篇

    1.系統(tǒng)框架圖對(duì)于個(gè)嵌入式系統(tǒng),最重要的當(dāng)然是運(yùn)算以及存儲(chǔ)單元,基本的嵌入式
    發(fā)表于 10-20 11:51 ?3次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>框架</b>----硬件篇

    嵌入式系統(tǒng)框架----軟件

    1.overview 圖1-1 嵌入式框架嵌入式系統(tǒng)分為硬件以及
    發(fā)表于 10-20 19:21 ?6次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>框架</b>----<b class='flag-5'>軟件</b>篇

    嵌入式linux設(shè)備中應(yīng)用運(yùn)行日志實(shí)現(xiàn)

    嵌入式linux設(shè)備中應(yīng)用運(yùn)行日志實(shí)現(xiàn)? ? ? 最近在做個(gè)項(xiàng)目時(shí),需要記錄設(shè)備運(yùn)行中情況,以方便對(duì)故障進(jìn)行跟蹤定位,完善.所以決定采用記錄程序運(yùn)行
    發(fā)表于 11-01 17:22 ?8次下載
    <b class='flag-5'>嵌入式</b>linux設(shè)備中應(yīng)用運(yùn)行<b class='flag-5'>日志</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    嵌入式開(kāi)發(fā)|嵌入式軟件框架《二》前后臺(tái)任務(wù)框架-cola os系統(tǒng)

    創(chuàng)建4.cola_os stime定時(shí)器創(chuàng)建前言在嵌入式軟件開(kāi)發(fā),包括單片機(jī)開(kāi)發(fā)中,軟件架構(gòu)對(duì)于開(kāi)發(fā)人員是個(gè)必須認(rèn)真考慮的問(wèn)題。軟件架構(gòu)對(duì)
    發(fā)表于 11-03 13:51 ?18次下載
    <b class='flag-5'>嵌入式</b>開(kāi)發(fā)|<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b><b class='flag-5'>框架</b>《二》前后臺(tái)任務(wù)<b class='flag-5'>框架</b>-cola os<b class='flag-5'>系統(tǒng)</b>

    嵌入式設(shè)備系統(tǒng)日志記錄方法

    嵌入式設(shè)備應(yīng)用場(chǎng)景中,系統(tǒng)日志時(shí)??梢员O(jiān)控設(shè)備軟件的運(yùn)行狀態(tài),及時(shí)記錄問(wèn)題點(diǎn)以及關(guān)鍵信息,方便開(kāi)發(fā)人員后期定位以及解決問(wèn)題。本文將講述
    的頭像 發(fā)表于 03-28 15:20 ?1.5w次閱讀

    嵌入式SD NAND】基于FATFS/Littlefs文件系統(tǒng)日志框架實(shí)現(xiàn)

    文章目錄 【嵌入式】基于FATFS/Littlefs文件系統(tǒng)日志框架實(shí)現(xiàn) 1. 概述 2. 設(shè)計(jì)概要 3. 設(shè)計(jì)
    的頭像 發(fā)表于 03-14 18:13 ?1516次閱讀
    【<b class='flag-5'>嵌入式</b>SD NAND】基于FATFS/Littlefs文件<b class='flag-5'>系統(tǒng)</b>的<b class='flag-5'>日志</b><b class='flag-5'>框架</b><b class='flag-5'>實(shí)現(xiàn)</b>

    嵌入式SD NAND】基于FATFS/Littlefs文件系統(tǒng)日志框架實(shí)現(xiàn)

    文章目錄【嵌入式】基于FATFS/Littlefs文件系統(tǒng)日志框架實(shí)現(xiàn)1.概述2.設(shè)計(jì)概要3.設(shè)計(jì)實(shí)現(xiàn)
    的頭像 發(fā)表于 03-14 18:12 ?1764次閱讀
    【<b class='flag-5'>嵌入式</b>SD NAND】基于FATFS/Littlefs文件<b class='flag-5'>系統(tǒng)</b>的<b class='flag-5'>日志</b><b class='flag-5'>框架</b><b class='flag-5'>實(shí)現(xiàn)</b>