Log4net
先說Log4net,它是.net平台上一個老牌的日志框架,我接觸的時間也不長(因為公司有自己的日志庫),但是看着各開源庫都在用這個於是前段時間也嘗試去了解了一下。
首先讓我認識到Log4net強大的地方就是它的多目標輸出,可以輸出到控制台、文件、數據庫、系統事件、Email等,幾乎無所不能。然后它可以通過配置讓日志系統實時生效,比如說在服務運行的過程中修改配置改變輸出目標,改變日志等級等,均不用重啟程序。但是Log4net也有一個讓我比較頭痛的地方就是感覺配置過於復雜,根本記不住,每次都必須去查閱資料,於是乎之前我也針對Log4net做了一個簡單的封裝,內嵌了一個默認使用文件存儲的日志配置,提供靜態日志方法,還提供一套性能統計的API(貌似Visual Studio 2015后IDE已自帶了)。以下是這個封裝的源代碼地址:github,nuget地址:nuget。
NLog
下面說說為什么又關注起NLog了,Nlog沒有Log4net老牌,使用從Nuget下載量來看也沒有Log4net用戶量大,但是它卻一直在保持高速的更新狀態,從github主頁上看它所支持的平台也相當廣泛,從.net環境到mono再到現在最新的Xamarin均支持:
比較
下面這個是一篇比較這兩種日志的文章,應該是翻譯的StackOverFlow再加上作者自己的一些見解: http://www.cnblogs.com/wanglee/archive/2013/05/22/3092474.html。
下面是總結的幾點
項目 | 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