Net Core集成Exceptionless分布式日志功能以及全局异常过滤
相信很多朋友都看過我的上篇關(guān)于Exceptionless的簡(jiǎn)單入門教程[asp.Net Core免費(fèi)開源分布式異常日志收集框架Exceptionless安裝配置以及簡(jiǎn)單使用圖文教程][https://www.cnblogs.com/yilezhu/p/9193723.html] 上篇文章只是簡(jiǎn)單的介紹了Exceptionless是什么?能做什么呢?以及怎么進(jìn)行本地部署和異常提交的簡(jiǎn)單用法,而這篇文章將帶你探討一下Exceptionless的異常收集高級(jí)用法以及你熟悉的類似NLog的日志用法。
這篇文章有一部分內(nèi)容翻譯自官方文檔,[點(diǎn)我閱讀][https://github.com/exceptionless/Exceptionless.Net/wiki/Sending-Events] 英語好的可以自行閱讀 。當(dāng)然中間很多代碼我都進(jìn)行了重構(gòu),還有參考周旭龍的代碼,進(jìn)行了簡(jiǎn)單地封裝,同時(shí)加入了為webapi加入異常全局過濾器進(jìn)行異常日志的記錄。希望對(duì)大家有所幫助。
本文地址:https://www.cnblogs.com/yilezhu/p/9339017.html
作者:依樂祝
手動(dòng)發(fā)送錯(cuò)誤
上篇文章介紹了,導(dǎo)入命名空間后,并使用如下代碼就可以簡(jiǎn)單地提交異常日志:
try { ??throw new ApplicationException(Guid.NewGuid().ToString()); } catch (Exception ex) {ex.ToExceptionless().Submit(); }
發(fā)送附加信息
當(dāng)然你還可以為發(fā)送的事件添加額外的標(biāo)記信息,比如坐標(biāo),標(biāo)簽,以及其他的用戶相關(guān)的信息等等
統(tǒng)一修改未處理的異常報(bào)告
你可以在通過SubmittingEvent 事件設(shè)置全局的忽略異常信息添加一些自定義信息等等
配合使用 NLog 或 Log4Net
有時(shí)候,程序中需要對(duì)日志信息做非常詳細(xì)的記錄,比如在開發(fā)階段。這個(gè)時(shí)候可以配合 log4net 或者 nlog 來聯(lián)合使用 exceptionless,詳細(xì)可以查看這個(gè)官方的 [示例][https://github.com/exceptionless/Exceptionless.Net/tree/master/samples/Exceptionless.SampleConsole]。
如果你的程序中有在短時(shí)間內(nèi)生成大量日志的情況,比如一分鐘產(chǎn)生上千的日志。這個(gè)時(shí)候你需要使用內(nèi)存存儲(chǔ)(in-memory store)事件,這樣客戶端就不會(huì)將事件系列化的磁盤,所以會(huì)快很多。這樣就可以使用Log4net 或者 Nlog來將一些事件存儲(chǔ)到磁盤,另外 Exceptionless 事件存儲(chǔ)到內(nèi)存當(dāng)中。
Exceptionless 日志記錄的封裝
首先簡(jiǎn)單地封裝一個(gè)ILoggerHelper接口
既然有了接口,那么當(dāng)然得實(shí)現(xiàn)它了
當(dāng)然實(shí)現(xiàn)好了,可別忘了依賴注入哦
這時(shí)候該寫一個(gè)全局異常過濾器了
全局過濾器寫好了,怎么讓它生效呢,客觀別急啊,上正菜
?//添加驗(yàn)證services.AddMvc(options=> {options.Filters.Add<GlobalExceptionFilter>();}).AddFluentValidation();哈哈,沒什么說的了,代碼都已經(jīng)寫好了,剩下的就是上代碼測(cè)試結(jié)果了。我這里只是簡(jiǎn)單地api測(cè)試下,萬能的ValuesController登場(chǎng):
這里是直接拋出異常,不進(jìn)行trycatch,這時(shí)候異常會(huì)被全局過濾器捕獲,然后放到Exceptionless的Log里面,別問我為什么會(huì)在log里面,因?yàn)槲胰诌^濾器代碼里面已經(jīng)寫明了,不明白的回去看代碼,然后看接口調(diào)用的實(shí)現(xiàn)方法。下面上結(jié)果:
點(diǎn)進(jìn)去,看看詳細(xì)信息:
再測(cè)試下使用try catch捕獲的異常處理,這時(shí)候異常信息會(huì)被提交到Exception這個(gè)里面。直接上代碼吧
到exceptionless里面看看不活的異常吧。打字很累直接上圖吧
點(diǎn)進(jìn)去看看詳細(xì)信息,有三個(gè)tab,下面之粘貼一個(gè)圖片了:
最后,源碼就不上了,因?yàn)樯厦娲a很清楚了
總結(jié)
本文沒有對(duì)Exceptionless進(jìn)行過多地介紹,因?yàn)椴┲鞯腫上篇文章][asp.Net Core免費(fèi)開源分布式異常日志收集框架Exceptionless安裝配置以及簡(jiǎn)單使用圖文教程] 已經(jīng)進(jìn)行了詳細(xì)的介紹。直接切入正題,先對(duì)官方高級(jí)用法進(jìn)行了簡(jiǎn)單地翻譯。然后對(duì)Exceptionless Log這個(gè)eventtype進(jìn)行了簡(jiǎn)單地封裝,讓你可以像使用NLog一樣很爽的使用Exceptionless。最后通過一個(gè)asp.net core web api的項(xiàng)目進(jìn)行了演示,在全局過濾器中利用封裝的Log方法進(jìn)行全局異常的捕獲。希望對(duì)大家使用Exceptionless有所幫助。
原文地址:http://www.infoq.com/cn/news/2018/07/dev-spaces-aks-preview
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的Net Core集成Exceptionless分布式日志功能以及全局异常过滤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解析Visual C# 7.2中的pri
- 下一篇: AspNetCore微服务下的网关-Ko