本次分享課程屬於《C#高級編程實戰技能開發寶典課程系列》中的第六部分,阿笨後續會計劃將實際項目中的一些比較實用的關於C#高級編程的技巧分享出來給你們進行學習,不斷的收集、整理和完善此係列課程!編程
1、本高級系列課程適合人羣以下緩存
一、有必定的NET開發基礎。安全
二、喜歡阿笨的乾貨分享課程的童鞋們。微信
2、今天咱們要解決的日誌痛點問題描述多線程
1)、你是否在爲找到一款輕量級日誌組件四處尋找而感到煩惱?併發
2)、你是否在爲log4net、nlog繁瑣的配置文件而感到煩惱?app
3)、你是否在尋找一款日誌文件記錄的格式內容簡潔的日誌組件而感到煩惱?異步
4)、你是否在尋找一款能夠支持自定義按照功能模塊分類存儲日誌文件的組件而感到煩惱?ide
若是您有遇到以上說起到的其中一點的話,那麼恭喜你很幸運看到了阿笨的輕量級EasyLogger日誌組件。性能
廢話很少說,直接上乾貨,咱們不生產乾貨,咱們只是乾貨的搬運工。
一、C#高效的線程安全隊列ConcurrentQueue實戰運用。
二、C# 線程的掛起與喚醒 (AutoResetEvent,ManualResetEvent)實戰運用。
三、C# 採用生產者消費者隊列模式將日誌文件異步的落地在磁盤中。
四、C# EasyLogger實現自定義按照功能模塊分類存儲日誌文件。(強烈推薦)
五、C# 微軟單元測試UnitTest項目應用程序運用。
六、C# 性能測試器PerformanceTestor運用。
1、實戰背景介紹
在咱們實際項目中你們通常的開源日誌組件好比:Log4net、NLog等等, 在使用的時候全部功能模塊的日誌記錄的信息都依賴同一個配置,特別是在項目中的定時任務做業計劃調度應用程序中 ,因而全部的做業日誌信息都在記錄在一個文件中,有時候查找起來,極其不方便。
那麼咱們能不能按照功能分類記錄日誌文件呢?雖然Log4net、NLog 能夠經過 配置不一樣的logger,而後功能根據不一樣的LoggerName加載Ilog實例,是能夠作到;可是實現起來繁瑣和複雜。因此咱們必須本身來造這個新輪子來知足適合工做中的實際項目需求。
2、EasyLogger特色介紹
一、簡單、容易上手,只須要引入一個DLL文件便可;無需繁瑣的配置文件。
二、支持多線程大併發同時寫入。
三、支持自定義按照功能模塊分類存儲日誌文件。(強烈推薦)
四、支持將日誌文件存儲在Elasticsearch全文搜索引擎中。(後續計劃中)
1、核心實現原理講解
咱們將使用列隊將日誌信息先緩存到內存,而後咱們一直有個線程再從列隊中寫到磁盤上,這樣就能夠高速高性能的寫日誌了。
2、爲何說是超高性能日誌組件?
EasyLogger內部採用典型的生產者消費模式。咱們就把速度慢的地方分離出來了,也就是說程序在把日誌扔給列隊後,程序的日誌部分就算完成了,後面操做磁盤耗時的部分程序是不須要關心的,由另外一個線程操做將日誌文件寫在硬盤中。
實現原理圖
項目截圖