日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 程序喵大人
[導(dǎo)讀]日志框架可以自己編寫(需要一定的能力哦),也可以由第三方(例如:log4cplus)提供。對于不同的日志框架,各自在實(shí)現(xiàn)方式上也有所不同。


1

日志框架


 日志框架

一個(gè)經(jīng)過專門設(shè)計(jì)的實(shí)用程序,用于規(guī)范應(yīng)用程序的日志記錄過程。


日志框架可以自己編寫(需要一定的能力哦),也可以由第三方(例如:log4cplus)提供。對于不同的日志框架,各自在實(shí)現(xiàn)方式上也有所不同。


雖然可以簡單地“標(biāo)準(zhǔn)化”日志(例如:調(diào)用文件系統(tǒng) API,將信息寫入名為 log.txt 的文件),但是要成為一個(gè)嚴(yán)格意義上的框架,必須要超越標(biāo)準(zhǔn)化。也就是說,日志框架必須通過處理日志記錄來標(biāo)準(zhǔn)化解決方案,從而暴露一個(gè)標(biāo)準(zhǔn)的 API。


沒明白?那就再具體一些,設(shè)想一個(gè)日志框架,封裝了三個(gè)主要部分:


當(dāng)想要捕獲程序的運(yùn)行時(shí)信息時(shí),首先要發(fā)出要記錄的信息。然后格式化這些信息,最后決定將它輸出到哪里。一般情況下,會(huì)輸出到文件中,但是也可以將其輸出到控制臺(tái)、數(shù)據(jù)庫,或者任何能夠接收數(shù)據(jù)的地方。


如果有一系列代碼,能夠解決這些問題,那么就可以被看作是一個(gè)日志框架。



2

為什么不是 cout




使用日志,只為成為更好的攻城獅。




也許有人會(huì)問:既然 C++ 中有 cout,為什么還要使用日志呢?


無法否認(rèn),在使用像 C++、Java、PHP 這樣的編程語言時(shí),我們會(huì)經(jīng)常將消息打印到控制臺(tái),因?yàn)檫@是開發(fā)、測試和調(diào)試程序的一部分。但倘若我們正在處理一個(gè)服務(wù)端程序,卻無法看到其內(nèi)部發(fā)生了什么,這時(shí)該怎么辦?唯一的可見性工具是日志文件,如果沒有日志,我們就不能進(jìn)行任何調(diào)試,也無法知道程序內(nèi)部在做什么。


盡管 C++ 中有相當(dāng)方便的 cout 輸出流,可以在控制臺(tái)上打印一些信息,或者可以通過其他方式將這些信息重定向到文件中,但這對于實(shí)際的應(yīng)用程序來說根本不夠。尤其對于復(fù)雜的 C++ 程序來說,像 log4cplus 或任何其他日志框架能夠提供了更多的靈活性,而這是 cout 不可能完成的。


在編寫代碼時(shí),使用日志框架是一種很好的實(shí)踐。即使像《代碼整潔之道》這樣的書籍,也建議學(xué)習(xí)像 Log4 這樣的框架進(jìn)行日志記錄。所以,應(yīng)盡可能的在生產(chǎn)代碼中使用日志,而不是用 cout 來打印東西(這是不可接受的)。



3

使用日志的好處




日志是一個(gè)優(yōu)秀系統(tǒng)不可或缺的組成部分。



對于很多人來說,日志的作用僅限于調(diào)試。其實(shí)不然,它在很多方面都非常有用。



日志是最好的診斷工具


絕大多數(shù)人都曾面臨這樣的困境 - 一旦程序出現(xiàn)問題,很長時(shí)間都找不出原因!


缺少日志,我們將不得不依賴于客戶或技術(shù)支持,讓他們描述在什么情況下發(fā)生了什么(很可能會(huì)存在一些誤導(dǎo))。隨后我們需要通過開發(fā)環(huán)境重現(xiàn)問題,并進(jìn)行各種調(diào)試,直至錯(cuò)誤修復(fù)為止,然而這一般會(huì)耗費(fèi)很長時(shí)間。但若有日志的幫助,我們便能迅速擺脫這種困境,可以很快地發(fā)現(xiàn)異常,并快速定位、解決問題!



日志讓我們有機(jī)會(huì)監(jiān)測模塊的瓶頸


隨著項(xiàng)目規(guī)模的增加,模塊會(huì)越來越多,調(diào)優(yōu)也變成了一場持久戰(zhàn)。


通過記錄某些操作所花費(fèi)的時(shí)間,我們可以及時(shí)地檢測模塊的瓶頸,并針對性地對一些耗時(shí)操作做出優(yōu)化。



日志有助于我們了解用戶的行為


為了提高產(chǎn)品質(zhì)量,提供個(gè)性化服務(wù),就必須了解用戶行為 - 他們做了什么,想要什么。


要搞清楚這些,當(dāng)然要有數(shù)據(jù),所以需要采集和分析用戶的行為,而日志無疑是最主要的數(shù)據(jù)來源。



4

要不要重新發(fā)明輪子


不要去重新發(fā)明輪子 - 《麥肯錫方法》



既然已經(jīng)對日志框架有了明確的了解,那么應(yīng)該使用現(xiàn)有的日志框架,還是構(gòu)建自己的日志框架呢?其實(shí),這是一個(gè)老生常談的問題了 - 要不要重新發(fā)明輪子?引用莎士比亞戲劇《哈姆雷特》中的一句名言:


To be or not to be - that is the question.


現(xiàn)在我們正處于技術(shù)大爆發(fā)的時(shí)代,每一個(gè)技術(shù)領(lǐng)域中都有很多優(yōu)秀的解決方案。因此,自己完全不需要、也不應(yīng)該去寫日志框架。就像不應(yīng)該寫版本控制工具或 Bug 跟蹤管理工具一樣,其他人已經(jīng)把這些東西搞出來了,而且搞的很好,Git、SVN,Bugzilla、Trac ...... 應(yīng)有盡有,我們完全可以花很少的錢,甚至是免費(fèi)使用它們。


所以,請避免重復(fù)勞動(dòng),不要去重新發(fā)明輪子。應(yīng)該堅(jiān)持在自己的領(lǐng)域解決問題,將時(shí)間花在刀刃上。話雖如此,但我們還是需要了解關(guān)于輪子的一些細(xì)節(jié)(誰造的?怎么創(chuàng)造的?如何使用?),以從中接受靈感,并把自己的知識(shí)加進(jìn)去。


因此,當(dāng)需要一個(gè)日志框架時(shí),應(yīng)該使用現(xiàn)有的框架,而不是去重新發(fā)明輪子。那么,問題來了,日志框架都有哪些呢?



5

日志框架都有哪些


C++ 中的日志框架有很多,其中比較著名的有:


  • log4cxx:Java 社區(qū)著名的 Log4j 的 C++ 移植版,用于為 C++ 程序提供日志功能,以便開發(fā)者對目標(biāo)程序進(jìn)行調(diào)試和審計(jì)。

  • log4cplus:一個(gè)簡單易用的 C++ 日志記錄 API,它提供了對日志管理和配置的線程安全、靈活和任意粒度控制(也基于 Log4j)。

  • Log4cpp:一個(gè) C++ 類庫,可以靈活地記錄到文件、syslog、IDSA 和其他目的地(也基于 Log4j)。

  • google-glog:一個(gè) C++ 語言的應(yīng)用級日志記錄框架,提供了 C++ 風(fēng)格的流操作和各種輔助宏。

  • Pantheios:一個(gè)類型安全、高效、泛型和可擴(kuò)展性的 C++ 日志 API 庫(號(hào)稱 C++ 領(lǐng)域速度最快的日志庫)。

  • POCO:還提供了一個(gè) 好的日志支持文檔。

  • ACE:ACE 也有日志支持。

  • Boost.Log:設(shè)計(jì)的非常模塊化,并且可擴(kuò)展。

  • Easylogging++:輕量級高性能 C++ 日志庫(只有一個(gè)頭文件)。

  • G3log:一個(gè)開源、支持跨平臺(tái)的異步 C++ 日志框架,支持自定義日志格式?;?g2log 構(gòu)建,提升了性能,支持自定義格式。

  • Plog:可移植、簡單和可擴(kuò)展的 C++ 日志庫。

  • spdlog:一個(gè)快速的 C++ 日志庫,只包含頭文件,兼容 C++11。

  • ……


這么多框架,應(yīng)該選擇哪一個(gè)呢?


由于每個(gè)人的需求和技術(shù)棧都不一樣,所以很難直接回答這個(gè)問題,但是有一些選擇標(biāo)準(zhǔn)可供參考。



6

日志選擇標(biāo)準(zhǔn)



易用性




易于使用的框架,能讓你事半功倍。



易用性,是優(yōu)秀框架的一個(gè)重要特性。所以無論使用什么框架,都應(yīng)優(yōu)先考慮這一點(diǎn)。


對于日志框架而言,一旦被選定,在后期開發(fā)過程中,項(xiàng)目組中的每個(gè)人都會(huì)頻繁使用。如果易用性不好的話,那絕對是一個(gè)噩夢!所以,在選擇日志框架時(shí),應(yīng)盡量找那些由簡單、直觀的 API 實(shí)現(xiàn)的方案。衡量標(biāo)準(zhǔn)可參考:對于缺乏經(jīng)驗(yàn)的團(tuán)隊(duì)成員,應(yīng)該在查看文檔和簡單示例之后,就能夠快速上手。



性能(效率)




功能決定當(dāng)下,性能決定未來。



另一個(gè)要考慮的重要因素是性能影響。正如上面提到的,我們會(huì)經(jīng)常調(diào)用日志,這可能會(huì)對程序的性能產(chǎn)生巨大的影響。


想象一下,一個(gè)日志框架,需要花費(fèi)很長的時(shí)間才能啟動(dòng),在每次調(diào)用時(shí)阻塞并執(zhí)行文件 I/O,缺少緩沖機(jī)制……對于這樣的框架,你會(huì)用嗎?


因此,在評估日志框架時(shí),可以參考網(wǎng)上的一些文章來比較,也可以自己做一些比較性實(shí)驗(yàn)(基準(zhǔn)測試),例如:吞吐量 - 測量每秒可以完成多少次方法調(diào)用(越高越好);采樣 - 測量每次調(diào)用執(zhí)行究竟花費(fèi)了多少時(shí)間(越低越好)。



對現(xiàn)有代碼的影響




影響越小,越容易維護(hù)。



在以后的使用中,日志將無處不在。就像會(huì)影響運(yùn)行時(shí)性能一樣,它們也會(huì)影響源碼的可維護(hù)性。


從應(yīng)用程序的角度來看,日志所處的位置比較尷尬。之所以這么說,是因?yàn)槲覀儽M力隔離依賴性,提供良好的接口,并最小化耦合,在編程時(shí)考慮的是單一職責(zé)原則。然后日志出現(xiàn)了,它到處都是,與周圍的代碼無關(guān)。與這些優(yōu)秀的設(shè)計(jì)原則相比,日志顯得有些背道而馳。


因此,應(yīng)充分考慮所引入日志的影響范圍,盡量讓我們的代碼改動(dòng)最小化!



社區(qū)支持




每一個(gè)成功框架的背后,都有一個(gè)偉大的社區(qū)。



框架的生命力源于不斷地完善和發(fā)展,如果沒有強(qiáng)大的社區(qū)做支撐,這個(gè)框架便失去了源動(dòng)力。


因此,在選擇框架時(shí),這一點(diǎn)非常重要 - 所選的框架是否有專門的團(tuán)隊(duì)做支撐?在像 Stack Overflow 這樣的問答網(wǎng)站上,它是否有很強(qiáng)的存在感?確保一點(diǎn),如果在使用過程中遇到了問題,你能有辦法快速解決。倘若選擇了一個(gè)不知名的框架,當(dāng)遇到了 Bug 時(shí),那么可能會(huì)浪費(fèi)大量的時(shí)間來解決問題。



完整性




完整的框架,鑄就完美的生產(chǎn)力。



在最前面,我們將日志的功能分為三個(gè)主要部分:日志記錄、格式化和輸出地,所以要確保所選的日志框架徹底解決了這些問題。


日志記錄和輸出地比較基礎(chǔ),幾乎所有日志框架都有這些概念。話雖如此,但對于好的框架來說,應(yīng)該巧妙地將日志記錄與輸出地分開,并且還應(yīng)該有多種可選的輸出地。在理想情況下,最好能夠自定義輸出地。


一般情況下,格式化日志文件會(huì)整齊地排列,并具有很好的可讀性。但在 DevOps 的世界里,這些遠(yuǎn)遠(yuǎn)不夠。具體來說,日志文件需要被格式化為可解析的數(shù)據(jù)。通過將日志輸出作為數(shù)據(jù)處理,可以很容易地聚合、搜索和可視化日志,從而能夠在生產(chǎn)支持方面助你一臂之力。所以,要確保日志框架擁有這種能力。



發(fā)展前景




只有前途光明,方能大行其道。



無法繞過這一點(diǎn) - 在選擇日志框架時(shí),不僅要考慮它的現(xiàn)狀,還應(yīng)該注重它的發(fā)展前景。


像上面提到的 C++ 日志框架,每一個(gè)都非常優(yōu)秀且特點(diǎn)鮮明。但有一些卻獲得了更多的關(guān)注度,例如 log4cplus、glog,為什么如此呢?因?yàn)樗鼈冇泻軓?qiáng)大的“基因”和“后臺(tái)”,一個(gè)是著名的 Log4j 的衍生品,另一個(gè)則是 Google 的“親兒子”。


一個(gè)框架的發(fā)展前景,取決于眾多因素 - 關(guān)注度、用戶基數(shù)、社區(qū)活躍度 …… 要想大行其道,這些幾乎都不能少。


往期推薦


1、深度好文|面試官:進(jìn)程和線程,我只問這19個(gè)問題

2、他來了,他來了,C++17新特性精華都在這了

3、一文讓你搞懂設(shè)計(jì)模式

4、C++11新特性,所有知識(shí)點(diǎn)都在這了!





免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉