1.背景框架
前兩天,曾經的一個同事諮詢我,怎樣將log4net以中間件的形式整合到core裏邊去。我不假思索的回答,這種問題應該有人作過吧,他說沒有。因而,我去博客園搜了下,發現還真沒有,所有都是傳統.NET那一套,直接LogManager.GetLogger,因而趁着週末有時間,決定調研下這個問題。去巨硬官網快速瀏覽了下,擴展第三方日誌的核心就在於兩個接口:ILogger和ILoggerProvider。因而建好解決方案,刷刷刷實現這兩個接口,實現差很少了查相關資料時,猛然發現,臥槽,已經有國外同仁實現過了,我尼瑪的辛苦寫半天,這下完全垮了。。。ide
2.切換四路.net
本着偷懶、鄙視瞎造輪子/裝逼的心態, 直接把解決方案切換到開源實現。實際上順便看了下第三方實現源碼,四路也是一致的,實現那兩個接口。3d
解決方案以下:日誌
包引用以下:中間件
最上邊的很少說,第二個別問我,第三個就是core整合log4net的主角。關於這個,得特別說明下,最新版本是2.2.1,但我並無引用最新的,而是2.1.0,由於目前有些第三方包最新版本引用的原子包是最新的,而上邊第二個鬼東東Microsoft.AspNetCore.App這個框架包底層的原子包卻並非,因此若是引用最新的第三方包,極可能會報某個原子包依賴版本不對的錯誤。解決方案有二:一、哪一個包報錯,你單獨安裝哪一個原子包的最新版本;二、切換第三方包的版本到較次,找到可以兼容當前Microsoft.AspNetCore.App的實現。解決方案1的問題是,你更新了這個原子包,它的依賴包又出錯,你更新了它的依賴的依賴,它的依賴的依賴的依賴又出錯。。。因此,方便起見,我直接用了Microsoft.Extensions.Logging.Log4Net.AspNetCore的較低版本。blog
log4net.config再也不截圖或上代碼,跟之前的德行沒啥兩樣。接口
接下來,註冊log4net:開發
圖中,前兩行的做用是過濾掉System和Microsoft開頭的命名空間下的組件產生的警告級別一下的日誌,實際上主要就是一些框架性日誌。第三行即是註冊log4net中間件。源碼
接下來新建控制器,注入日誌實踐下效果:
上圖兩個紅框,上邊一個是構造器注入日誌接口,下邊是調用日誌組件記錄日誌。
好,接下來咱們去看看系統產生的日誌,先調用:
控制檯窗口:
OK,日誌已經輸出成功,接下來,咱們看關鍵性的輸出到文件:
看到沒有,日誌已經成功經由log4net輸出到文件。
3.總結
感受沒什麼好總結的,.net core提供的擴展已經很開放了,雖然log4net目前比較操蛋,但這對咱大部分.NET開發者來講應該都不是事兒。