日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

log.c是什么?

小麥大叔 ? 來源:小麥大叔 ? 作者:小麥大叔 ? 2022-06-05 14:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這兩天發(fā)現(xiàn)一個還不錯的開源項目,記錄一下學(xué)習(xí)心得。對于嵌入式底層應(yīng)用開發(fā),基本離不開日志功能,這種輪子有很多,log.c 最簡單,達到了開箱即用的級別。

log.c 是什么?


	https://github.com/rxi/log.c 簡單地說,log.c 就是一個 C 語言的日志功能模塊。2900acd4-e171-11ec-ba43-dac502259ad0.png點擊查看大圖log.c 的幾個特點:代碼簡潔,就一個 .c 和 .h 文件,一共 200 行。設(shè)計優(yōu)雅,打印日志的 API 只有 1 個。提供了將 log 輸入到不同目標的接口,例如輸入到文件。提供了實現(xiàn)線程安全的接口。 

log.c 怎么用?

打印日志的 API:

	log_trace(constchar*fmt,...); log_debug(constchar*fmt,...); log_info(constchar*fmt,...); log_warn(constchar*fmt,...); log_error(constchar*fmt,...); log_fatal(constchar*fmt,...); 它們都是對 log_log() 的簡單封裝,用法和 printf() 一樣。示例:下面的例子會將日志同時輸出到標準輸出和文件中。

	#include"log.h" intmain(intargc,char*argv[]) { log_set_level(0); log_set_quiet(0); FILE*fp1,*fp2; fp1=fopen("./log_info.txt","ab"); if(fp1==NULL) return-1; fp2=fopen("./log_debug.txt","ab"); if(fp2==NULL) return-1; log_add_fp(fp1,LOG_INFO); log_add_fp(fp2,LOG_DEBUG); log_debug("debug"); log_info("info"); log_warn("warn"); fclose(fp2); fclose(fp1); return0; } 運行:

	$./example1 2305DEBUGexample1.cdebug 2305INFOexample1.cinfo 2305WARNexample1.cwarn $catlog_debug.txt 2022-05-082305DEBUGexample1.cdebug 2022-05-082305INFOexample1.cinfo 2022-05-082305WARNexample1.cwarn $catlog_info.txt 2022-05-082305INFOexample1.cinfo 2022-05-082305WARNexample1.cwarn 關(guān)于線程安全:log.c 代碼雖然少,但是仍然考慮了線程安全,下面是用法示例。

	#include"log.h" pthread_mutex_tMUTEX_LOG; voidlog_lock(boollock,void*udata); intmain() { log_set_level(0); log_set_quiet(0); pthread_mutex_init(&MUTEX_LOG,NULL); log_set_lock(log_lock,&MUTEX_LOG); /*Insertthreadedapplicationcodehere...*/ log_info("I'mthreadsafe"); pthread_mutex_destroy(&MUTEX_LOG); return0; } voidlog_lock(boollock,void*udata) { pthread_mutex_t*LOCK=(pthread_mutex_t*)(udata); if(lock) pthread_mutex_lock(LOCK); else pthread_mutex_unlock(LOCK); } 

log.c 的內(nèi)部實現(xiàn)?

私有數(shù)據(jù)結(jié)構(gòu):293dfd46-e171-11ec-ba43-dac502259ad0.png點擊查看大圖全局變量 L 維護了 log.c 所需要的所有信息。void *udata 用于保存用戶數(shù)據(jù),用戶可以將其用作任意用途。lock 是一個函數(shù)指針:。

	typedefvoid(*log_LockFn)(boollock,void*udata); 用戶可以用它來指定自己想用的鎖機制,例如 Pthread 的互斥量。int level 用于保存當前的 log 等級,等級大于 level 的 log 才會被輸出到標準輸出。bool quiet 用于打開、關(guān)閉 log 輸出。數(shù)組 callbacks 用于保存多種輸出方式,目前僅支持輸出到標準輸出和文件,有需要的話我們還可以將其擴展成輸出到 syslog、網(wǎng)絡(luò)等,每增加一種輸出方式就是構(gòu)造一個 Callback,成員回調(diào)函數(shù) log_LogFn 負責(zé)真正地 log 輸出功能:

	typedefvoid(*log_LogFn)(log_Event*ev); 公共數(shù)據(jù)結(jié)構(gòu):298ef3cc-e171-11ec-ba43-dac502259ad0.png點擊查看大圖一條 log 信息對應(yīng)一個 log_Event。暴露這個數(shù)據(jù)結(jié)構(gòu)是為了用戶可以編寫自己的 log 打印函數(shù) log_LogFn 以輸出 log。公共的 API:整個 log.c 其實只提供了一個打印相關(guān)的 API:log_log()。log_trace() 等宏只是對 log_log() 的簡單封裝,這種簡潔地設(shè)計無論是對庫的用戶還是對庫的開發(fā)者而言,都是最幸福的事情。剩下的幾個 API 用于控制和功能擴展。log_log() 的實現(xiàn)思路1> 根據(jù)用于提供的 log 信息構(gòu)造 1個 log_Event。2> 將 log 信息輸出到標準輸出。3> 遍歷所有 log Callback,逐一調(diào)用它們的打印函數(shù) log_LogFn。 

總結(jié)

log.c 代碼優(yōu)雅、設(shè)計簡潔、功能實用,這對庫的用戶和庫的開發(fā)者而言,都是一種幸福。如果你的項目需要一個簡單好用的日志功能,可以考慮集成開箱即用的 log.c

審核編輯 :李倩


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

    關(guān)注

    5210

    文章

    20680

    瀏覽量

    337420
  • 開源項目
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    7644

原文標題:調(diào)試利器!一款輕量級日志庫 log.c

文章出處:【微信號:knifewheat,微信公眾號:小麥大叔】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    利用Last Log(Ramoops)排查系統(tǒng)問題:配置與實踐指南

    在嵌入式系統(tǒng)(如基于瑞芯微 RK3399 的 Android 設(shè)備)開發(fā)或維護中,系統(tǒng)常因內(nèi)核崩潰(Panic)、用戶空間異常等突發(fā)情況重啟,導(dǎo)致關(guān)鍵日志丟失。此時,Last Log(依托
    的頭像 發(fā)表于 02-05 13:54 ?529次閱讀
    利用Last <b class='flag-5'>Log</b>(Ramoops)排查系統(tǒng)問題:配置與實踐指南

    探索 HMC - C088:高頻高性能 Successive Detection Log Video Amplifier

    探索 HMC - C088:高頻高性能 Successive Detection Log Video Amplifier 在當今電子科技迅猛發(fā)展的時代,高頻、高性能的電子元件對于各類電子系統(tǒng)的升級
    的頭像 發(fā)表于 01-15 14:00 ?429次閱讀

    C語言宏拼接運算符典型使用

    C語言中,##運算符(稱為[size=16.002px]標記拼接運算符)用于宏定義中將兩個標記(token)拼接成一個新的標記。它在預(yù)處理階段處理,常用于動態(tài)生成變量名、函數(shù)名或類型名,以提高代碼
    發(fā)表于 11-20 08:27

    【瑞薩RA6E2】板載uart測試,控制臺shell及帶顏色輸出log的實現(xiàn)

    的調(diào)試信息類型顯示不同的顏色,接下來也實現(xiàn)一下。 這里直接貼.c.h出代碼,如下: log.c /** * @file log.c * @author Letter
    發(fā)表于 11-09 23:50

    easyflash 寫入多條log保存到flash成功,讀取多條失敗是怎么回事?

    很多人都在推,所以我就用了。 按照教程,我只需要log保存功能,使能EF_USING_LOG,ENV跟IAP暫時不需要,所以全部屏蔽了。 #ifndef EF_CFG_H_ #define
    發(fā)表于 09-24 07:13

    為什么導(dǎo)入bsp會失敗,還有個.log文件?

    文件如下 .log
    發(fā)表于 09-22 07:25

    Texas Instruments LOG300DEVM和LOG300RGTEVM評估模塊數(shù)據(jù)手冊

    Texas Instruments LOG300DEVM和LOG300RGTEVM評估模塊 (EVM) 設(shè)計用于評估集成對數(shù)檢波器、低噪聲放大器 (LNA) 和輸入頻率檢測器的性能,所有這些都集成在
    的頭像 發(fā)表于 07-21 10:15 ?882次閱讀
    Texas Instruments <b class='flag-5'>LOG</b>300DEVM和<b class='flag-5'>LOG</b>300RGTEVM評估模塊數(shù)據(jù)手冊

    Texas Instruments LOG200EVM放大器評估模塊 (EVM)數(shù)據(jù)手冊

    Texas Instruments LOG200EVM放大器評估模塊 (EVM) 是一個用于評估LOG200的開發(fā)平臺,LOG200是一款精密、高速對數(shù)放大器,集成了光電二極管偏置和暗電流校正功能
    的頭像 發(fā)表于 07-21 09:51 ?900次閱讀
    Texas Instruments <b class='flag-5'>LOG</b>200EVM放大器評估模塊 (EVM)數(shù)據(jù)手冊

    Texas Instruments LOG300 40MHz對數(shù)探測器數(shù)據(jù)手冊

    Texas Instruments LOG300 40MHz對數(shù)探測器是一款由低噪聲放大器 (LNA) 和對數(shù)探測器模塊組成的集成模擬前端 (AFE)。該器件支持高達40MHz的輸入頻率范圍
    的頭像 發(fā)表于 07-17 13:43 ?941次閱讀
    Texas Instruments <b class='flag-5'>LOG</b>300 40MHz對數(shù)探測器數(shù)據(jù)手冊

    Texas Instruments LOG200精密高速對數(shù)放大器數(shù)據(jù)手冊

    Texas Instruments LOG200精密高速對數(shù)放大器是一款寬動態(tài)范圍電流到電壓放大器,設(shè)計旨在優(yōu)化160dB動態(tài)范圍內(nèi)的電流測量。該器件具有無與倫比的精度和速度,用在醫(yī)療診斷、光通信
    的頭像 發(fā)表于 07-09 11:22 ?941次閱讀
    Texas Instruments <b class='flag-5'>LOG</b>200精密高速對數(shù)放大器數(shù)據(jù)手冊

    CYW20829全雙工UART和I2C Master同時工作導(dǎo)致UART log輸出異常怎么解決?

    CYW20829使用code example HAL_I2C_Master, 修改UART使用P1_3, P1_2, 修改I2C Master使用P0_3, P0_2, uart log和I2
    發(fā)表于 06-27 07:57

    easyflash 寫入多條log保存到flash成功,讀取多條失敗的原因?

    很多人都在推,所以我就用了。 按照教程,我只需要log保存功能,使能EF_USING_LOG,ENV跟IAP暫時不需要,所以全部屏蔽了。 #ifndef EF_CFG_H_ #define
    發(fā)表于 06-13 07:02

    用CYUSB3065配置imx678時,log打印出現(xiàn)DMA RESET的原因?

    工程師你好: 我這邊用CYUSB3065配置imx678時,log打印出現(xiàn)DMA RESET,我不知道從何分析,請幫我看看,謝謝!
    發(fā)表于 05-20 06:29

    全棧開發(fā)進階指南:LuatOS-log庫從入門到實戰(zhàn)!

    本文將帶你深入探索LuatOS系統(tǒng)中log庫的核心原理與實戰(zhàn)技巧,通過代碼示例解析日志管理、錯誤追蹤及性能優(yōu)化的最佳實踐,助力全棧工程師構(gòu)建更穩(wěn)健的物聯(lián)網(wǎng)應(yīng)用。 今天,我們一起來認識LuatOS
    的頭像 發(fā)表于 05-15 16:12 ?3028次閱讀
    全棧開發(fā)進階指南:LuatOS-<b class='flag-5'>log</b>庫從入門到實戰(zhàn)!

    解鎖LuatOS-log庫:全棧工程師的日志管理實戰(zhàn)課!

    針對全棧開發(fā)者設(shè)計的實戰(zhàn)教程,本文聚焦LuatOS平臺log庫的高效使用,從基礎(chǔ)配置到高級調(diào)試策略,手把手教你搭建可擴展的日志系統(tǒng),提升項目維護效率。 今天,我們一起來認識LuatOS的log
    的頭像 發(fā)表于 05-12 15:23 ?1662次閱讀
    解鎖LuatOS-<b class='flag-5'>log</b>庫:全棧工程師的日志管理實戰(zhàn)課!
    嘉黎县| 昌乐县| 正宁县| 永丰县| 凉城县| 鄄城县| 霍城县| 潮州市| 大埔县| 娄烦县| 贺州市| 临安市| 江源县| 岳阳县| 浦东新区| 房山区| 宿州市| 疏附县| 日照市| 临清市| 扎鲁特旗| 文山县| 青铜峡市| 鄂尔多斯市| 揭西县| 福安市| 崇礼县| 宿州市| 青河县| 寿阳县| 云浮市| 富宁县| 吉木萨尔县| 莱州市| 南和县| 临安市| 汝南县| 夏津县| 北流市| 通榆县| 普兰店市|