日誌框架對比 NLog VS Log4net

Log4net

先說Log4net,它是.net平臺上一個老牌的日誌框架,我接觸的時間也不長(由於公司有本身的日誌庫),可是看着各開源庫都在用這個因而前段時間也嘗試去了解了一下。html

首先讓我認識到Log4net強大的地方就是它的多目標輸出,能夠輸出到控制檯、文件、數據庫、系統事件、Email等,幾乎無所不能。而後它能夠經過配置讓日誌系統實時生效,好比說在服務運行的過程當中修改配置改變輸出目標,改變日誌等級等,均不用重啓程序。可是Log4net也有一個讓我比較頭痛的地方就是感受配置過於複雜,根本記不住,每次都必須去查閱資料,因而乎以前我也針對Log4net作了一個簡單的封裝,內嵌了一個默認使用文件存儲的日誌配置,提供靜態日誌方法,還提供一套性能統計的API(貌似Visual Studio 2015後IDE已自帶了)。如下是這個封裝的源代碼地址:github,nuget地址:nugetgit

NLog

下面說說爲何又關注起NLog了,Nlog沒有Log4net老牌,使用從Nuget下載量來看也沒有Log4net用戶量大,可是它卻一直在保持高速的更新狀態,從github主頁上看它所支持的平臺也至關普遍,從.net環境到mono再到如今最新的Xamarin均支持:
nlog支持範圍github

比較

下面這個是一篇比較這兩種日誌的文章,應該是翻譯的StackOverFlow再加上做者本身的一些看法: http://www.cnblogs.com/wanglee/archive/2013/05/22/3092474.html數據庫

下面是總結的幾點apache

項目 log4net nlog
流行程度
易用性
動態配置
輸出目標
跨平臺
開源持續維護
日誌性能

性能比較(再也不有效,詳見文末)

這是用這兩款日誌框架寫的一個性能比較的Demo,暫時只比較了文件記錄日誌的狀況(由於相對來講這種狀況應該是最多的),附上源碼地址
性能比較結果如圖,分別是Debug條件編譯下的單線程和並行多線程以及獨佔鎖和最小衝突鎖的狀況:
多線程

性能比較結果

2017年9月1日更新:

以上性能測試再也不有效,根據網友反饋,因爲輸出內容的略有差別致使上面性能測試出現不公平的狀況,log4Net在輸出時可能會有更多的計算量。在優化測試代碼狀況下,僅讓日誌框架打印日誌內容,其他的包括時間、日誌等級、日誌類名一概不打印,使用最新版Dll,兩個框架性能相差無幾。框架

推薦閱讀
NET開源項目介紹及資源推薦:http://www.cnblogs.com/Terrylee/archive/2006/12/03/opensource_framework_and_resource_recommendation_Log.html開源項目介紹

附加連接
log4net:https://logging.apache.org/log4net/
NLog:https://github.com/NLog/NLog性能

相關文章
相關標籤/搜索