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