1. 程式人生 > >C#輕量級高效能日誌元件EasyLogger(六)

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內部採用典型的生產者消費模式。我們就把速度慢的地方分離出來了,也就是說程式在把日誌扔給列隊後,程式的日誌部分就算完成了,後面操作磁碟耗時的部分程式是不需要關心的,由另一個執行緒操作將日誌檔案寫在硬碟中。


實現原理圖

五、原始碼線上解讀和演示


專案截圖

相關推薦

C#輕量級高效能日誌元件EasyLogger()

一、課程介紹 本次分享課程屬於《C#高階程式設計實戰技能開發寶典課程系列》中的第六部分,阿笨後續會計劃將實際專案中的一些比較實用的關於C#高階程式設計的技巧分享出來給大家進行學習,不斷的收集、整理和完善此係列課程! 一、本高階系列課程適合人群如下 1、有一定的NET開發基礎。 2、喜歡阿笨的乾貨分

C#輕量級通通訊元件StriveEngine —— C/S通訊開源demo(2) —— 使用二進位制協議 (附原始碼)

前段時間,有幾個研究的朋友對我說,ESFramework有點龐大,對於他們目前的專案來說有點“殺雞用牛刀”的意思,因為他們的專案不需要檔案傳送、不需要P2P、不存在好友關係、也不存在組廣播、不需要伺服器均衡、不需要跨伺服器通訊、甚至都不需要使用UserID,只要客戶端能與服務端進行簡單的穩定高效的通訊就可以了

C# 使用 log4net 日誌元件

一、 什麼是 log4net        Apache log4net 庫是幫助程式設計師將日誌語句輸出到各種輸出目標的工具,它是從Java中的Log4j遷移過來的一個.Net版的開源日誌框架。log4net 的一個顯著特徵是分層記錄器的概念,使用這些記錄器可以有選擇

C#輕量級高性能日誌組件EasyLogger()

程序 覆蓋 search 其中 高性能 shu logger mil bottom 一、課程介紹本次分享課程屬於《C#高級編程實戰技能開發寶典課程系列》中的第六部分,阿笨後續會計劃將實際項目中的一些比較實用的關於C#高級編程的技巧分享出來給大家進行學習,不斷的收集、整理和完

C# 超高速高效能日誌 程式碼開源

1、需求 需求很簡單,就是在C#開發中高速寫日誌。比如在高併發,高流量的地方需要寫日誌。我們知道程式在操作磁碟時是比較耗時的,所以我們把日誌寫到磁碟上會有一定的時間耗在上面,這些並不是我們想看到的。   2、解決方案 2.1、簡單原理說明 使用列隊先快取到記憶體,然後我們一直有個執行緒再從

Winform/C#入門程式設計之第二部分常用控制元件:標籤控制元件Label)

簡介:         介紹標籤控制元件Label。一般單獨或者配合編輯框控制元件等使用,用作提示或解釋等。   介紹: 1.屬性 常用屬性 Name 獲取或設定控制元件的名稱

C#元件系列——又一款日誌元件:Elmah的學習和分享

前言:好久沒動筆了,都有點生疏,12月都要接近尾聲,可是這月連一篇的產出都沒有,不能壞了“規矩”,今天還是來寫一篇。最近個把月確實很忙,不過每天早上還是會抽空來園子裡逛逛。一如既往,園子裡每年這個時候都有大把的年終總結、回憶過去展望未來之類的文章。博主是沒時間寫總結了,要學的東西太多。關於Vue的系列一定要抽

C#輕量級日誌監控器EasyLogMonitor

-c logger debug 根據 技能 擴展性 和源 只需要 pack 一、課程介紹 本次分享課程屬於《C#高級編程實戰技能開發寶典課程系列》中的一部分,阿笨後續會計劃將實際項目中的一些比較實用的關於C#高級編程的技巧分享出來給大家進行學習,不斷的收集、整理和完善

C#控制檯程式使用Log4net日誌元件

1、Log4net一般都不陌生,但是在配置上不同型別的專案又不相同的地方比如C#控制檯程式和C# MVCWeb專案,拿控制檯專案為例   專案原始碼在文章底部 2、首先建立一個控制檯程式,引入Log4net.dll    --使用NuGet    3、進行一些

C#開發之控制檯程式使用log4net日誌元件

使用背景: 用C#寫一個TCP/IP server端的程式,需要將傳送和接收的報文以日誌的形式儲存,所以進行了如下配置; 1、這其中我所建立的工程是C#控制檯應用;   2、使用NuGet下載安裝log4net.dll; 3、新增新建項-應用程式配置檔

自己編寫的 C++ 超輕量級日誌

生日 輸出時間 hello 默認 include 行數 ble lease std 【自己編寫的 C++ 超輕量級日誌類(兼容vc++6.0、vs2010、vs2015)】 先來看效果: 【測試文件:test.cpp】 /* 作者:閆文山 時間:2017/07/02

初探 C++ 標準庫(二十

C++ 標準庫 cout cin 操作符重載 今天我們來看下 C++ 中的標準庫,這幾天我們一直學習的是 C++ 中的一大難點,操作符重載。那麽我們想想操作符左移 << 可以重載嗎?操作符 << 的原生語義是按位左移,如:1 << 2,則

『Python CoolBook』C擴展庫_其_從C語言中調用Python代碼

callable 什麽 跟著 來講 cpp iat mst 轉化 gcc 一、C語言運行pyfun的PyObject對象 思路是在C語言中提供實參,傳給python函數: 獲取py函數對象(PyObject),函數參數(C類型) 獲取GIL(PyGILState_

『Python CoolBook』C擴展庫_其_線程

正在 args adsi 控制 數組 代碼 and begin extend GIL操作 想讓C擴展代碼和Python解釋器中的其他進程一起正確的執行, 那麽你就需要去釋放並重新獲取全局解釋器鎖(GIL)。 在Python接口封裝中去釋放並重新獲取全局解釋器鎖(GIL)

NGINX 日誌處理 之

nginx錯誤 processes sta 日誌處理 bytes oca timeout for type 1、定義NGINX錯誤日誌 worker_processes 1; events { worker_connections 1024; } err

c++ 網絡編程()TCP/IP LINUX下 socket編程 多播與廣播 實現一次發送所有組客戶端都能接收到

send all users 代碼示例 proto 次數 不可 的人 ssa 原文作者:aircraft 原文鏈接:https://www.cnblogs.com/DOMLX/p/9614288.html 一.多播 鍥子:有這麽一種情況,網絡電臺可能需要同時向成

c語言實現日誌功能

windows.h 用c語言實現 pause truct argc ifdef open info oid // 參考鏈接 // C語言實現寫入日誌文件 https://blog.csdn.net/sunlion81/article/details/8647028 #

C#6.0語言規範(十) 異常

exc out mex 這樣的 不兼容 classes exce 析構函數 不同 C#中的異常提供了一種結構化,統一且類型安全的方法來處理系統級和應用程序級錯誤條件。C#中的異常機制與C ++的異常機制非常相似,但有一些重要的區別: 在C#中,所有異常必須由派生自的類

C語言程序設計I—第周教學

想象 jpg 作業 image tps 嵌套 cfb 生活 第五周作業 第六周教學總結(8/10-14/10) 教學內容   第二章 用C語言編寫程序    2.4 輸出華氏-攝氏溫度轉換表 課前準備   在藍墨雲班課發布資源:   PTA:2018秋第六周作業 分享碼:8

Java的繼承與記憶體結構——有C++基礎的Java入門(

目錄 一、 繼承概念 1、語法 2、 例項  3、 總結 二、 繼承的記憶體結構 一、 繼承概念 繼承是面向物件最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的能力。 通俗一點:描述事物的時候,如