.net core整合log4net的解決方案
概述
log4net是.Net下一個(gè)非常優(yōu)秀的開源日志記錄組件。log4net記錄日志的功能非常強(qiáng)大。它可以將日志分不同的等級(jí),以不同的格式,輸出到不同的媒介。
背景
前兩天,曾經(jīng)的一個(gè)同事咨詢我,怎樣將log4net以中間件的形式整合到core里邊去。我不假思索的回答,這種問題應(yīng)該有人做過吧,他說沒有。于是,我去博客園搜了下,發(fā)現(xiàn)還真沒有,全部都是傳統(tǒng).NET那一套,直接LogManager.GetLogger,于是趁著周末有時(shí)間,決定調(diào)研下這個(gè)問題。去巨硬官網(wǎng)快速瀏覽了下,擴(kuò)展第三方日志的核心就在于兩個(gè)接口:ILogger和ILoggerProvider。于是建好解決方案,刷刷刷實(shí)現(xiàn)這兩個(gè)接口,實(shí)現(xiàn)差不多了查相關(guān)資料時(shí),猛然發(fā)現(xiàn),臥槽,已經(jīng)有國外同仁實(shí)現(xiàn)過了,我尼瑪?shù)男量鄬懓胩?,這下徹底垮了。。。
切換四路
本著偷懶、鄙視瞎造輪子/裝逼的心態(tài), 直接把解決方案切換到開源實(shí)現(xiàn)。實(shí)際上順便看了下第三方實(shí)現(xiàn)源碼,四路也是一致的,實(shí)現(xiàn)那兩個(gè)接口。
解決方案如下:

包引用如下:

最上邊的不多說,第二個(gè)別問我,第三個(gè)就是core整合log4net的主角。關(guān)于這個(gè),得特別說明下,最新版本是2.2.1,但我并沒有引用最新的,而是2.1.0,因?yàn)槟壳坝行┑谌桨钚掳姹疽玫脑影亲钚碌模线叺诙€(gè)鬼東東Microsoft.AspNetCore.App這個(gè)框架包底層的原子包卻并不是,所以如果引用最新的第三方包,很可能會(huì)報(bào)某個(gè)原子包依賴版本不對(duì)的錯(cuò)誤。解決方案有二:1、哪個(gè)包報(bào)錯(cuò),你單獨(dú)安裝哪個(gè)原子包的最新版本;2、切換第三方包的版本到較次,找到能夠兼容當(dāng)前Microsoft.AspNetCore.App的實(shí)現(xiàn)。解決方案1的問題是,你更新了這個(gè)原子包,它的依賴包又出錯(cuò),你更新了它的依賴的依賴,它的依賴的依賴的依賴又出錯(cuò)。。。所以,方便起見,我直接用了Microsoft.Extensions.Logging.Log4Net.AspNetCore的較低版本。
log4net.config不再截圖或上代碼,跟以前的德行沒啥兩樣。
接下來,注冊(cè)log4net:

圖中,前兩行的作用是過濾掉System和Microsoft開頭的命名空間下的組件產(chǎn)生的警告級(jí)別一下的日志,實(shí)際上主要就是一些框架性日志。第三行便是注冊(cè)log4net中間件。
接下來新建控制器,注入日志實(shí)踐下效果:

上圖兩個(gè)紅框,上邊一個(gè)是構(gòu)造器注入日志接口,下邊是調(diào)用日志組件記錄日志。
好,接下來我們?nèi)タ纯聪到y(tǒng)產(chǎn)生的日志,先調(diào)用:

控制臺(tái)窗口:

OK,日志已經(jīng)輸出成功,接下來,我們看關(guān)鍵性的輸出到文件:

看到?jīng)]有,日志已經(jīng)成功經(jīng)由log4net輸出到文件。
總結(jié)
感覺沒什么好總結(jié)的,.net core提供的擴(kuò)展已經(jīng)很開放了,雖然log4net目前比較操蛋,但這對(duì)咱大部分.NET開發(fā)者來說應(yīng)該都不是事兒。
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- ASP.NET Core使用Log4net實(shí)現(xiàn)日志記錄功能
- .net項(xiàng)目使用日志框架log4net
- .Net?Core3.0?WebApi?項(xiàng)目框架搭建之使用Serilog替換掉Log4j
- .NET6在WebApi中使用日志組件log4net
- asp.net中使用log4net詳解
- 在.NET?6中使用日志組件log4net的方法
- .NET Core下使用Log4Net記錄日志的方法步驟
- ASP.NET MVC中使用log4net的實(shí)現(xiàn)示例
- .net簡(jiǎn)單使用Log4net的方法(多個(gè)日志配置文件)
- asp.net log4net的使用方法
- asp.net中Log4.net的工具類helper
相關(guān)文章
ASP.NET 水晶報(bào)表打印功能實(shí)現(xiàn)代碼
ASP.NET下的水晶報(bào)表打印,據(jù)我所知有以下幾種辦法可以打印2008-11-11
VS2015在升級(jí)到Update2之后運(yùn)行Cordova項(xiàng)目異常的解決方案
這篇文章主要介紹了VS2015在升級(jí)到Update2之后運(yùn)行Cordova項(xiàng)目異常的解決方案的相關(guān)資料,需要的朋友可以參考下2016-07-07
DataView.RowFilter的使用(包括in,like等SQL中的操作符)
這篇blog轉(zhuǎn)自C# examples,對(duì)DataView.RowFilter做了詳細(xì)介紹,能像SQL中使用in,like等操作符一樣進(jìn)行過濾查詢,并附有實(shí)例,使用方便。2011-07-07
asp.net 禁用viewstate在web.config里
在web.config里設(shè)置禁用viewstate的代碼。2009-06-06
淺談對(duì)Jquery+JSON+WebService的使用小結(jié)
本篇文章介紹了對(duì)Jquery+JSON+WebService的使用小結(jié)。需要的朋友參考下2013-04-04
asp.net 動(dòng)態(tài)添加多個(gè)用戶控件
動(dòng)態(tài)添加多個(gè)相同用戶控件,并使每個(gè)用戶控件獲取不同的內(nèi)容。2009-12-12
關(guān)于.NET/C#/WCF/WPF 打造IP網(wǎng)絡(luò)智能視頻監(jiān)控系統(tǒng)的介紹
本篇文章小編將為大家介紹,關(guān)于.NET/C#/WCF/WPF 打造IP網(wǎng)絡(luò)智能視頻監(jiān)控系統(tǒng)的介紹。需要的朋友參考下2013-04-04
基于ASP.NET實(shí)現(xiàn)單點(diǎn)登錄(SSO)的示例代碼
SSO英文全稱Single?Sign?On(單點(diǎn)登錄)。SSO是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。本文為大家分享了基于ASP.NET實(shí)現(xiàn)單點(diǎn)登錄(SSO)的示例代碼,需要的可以參考一下2022-05-05

