日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NET Core微服务之基于Exceptionless实现分布式日志记录

發布時間:2023/12/4 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET Core微服务之基于Exceptionless实现分布式日志记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Exceptionless極簡介紹

  Exceptionless 是一個開源的實時的日志收集框架,它可以應用在基于 ASP.NET,ASP.NET Core,Web API,Web Forms,WPF,Console,ASP.NET MVC 等技術開發的應用程序中,并且提供了REST接口可以應用在 Javascript,Node.js 中。它將日志收集變得簡單易用并且不需要了解太多的相關技術細節及配置,對于微服務架構的應用程序來說,統一的日志收集系統的建立更是有必要。

二、Quick Start

2.1 官方創建一個賬號

  

2.2 創建項目

  

2.3 得到ApiKey

  

2.4 安裝Exceptionless.AspNetCore并進行配置

NuGet>Install-Package Exceptionless.AspNetCore  

  *.目前最新版本是4.3.2004

  在你要進行Logging的項目(MVC,WebAPI等)中注冊APIKey,這里以ASP.NET Core WebAPI項目為例:


public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime lifetime){......app.UseMvc(); ? ? ? ?// exceptionlessapp.UseExceptionless(Configuration["Exceptionless:ApiKey"]); ? ? ? ?// swagger ? ? ? ?......}

  這里我將ApiKey配置到了json配置文件中:

"Exceptionless": { ?
?
"ApiKey": "Your Api Key from Exceptionless server"}

2.5 簡單地封裝一個ExceptionlessLogger

  (1)自定義一個ILogger接口

public interface ILogger{ ? ? ? ?
? ? ? ? ? ?
void Trace(string message, params string[] args); ? ?
? ? ? ?? ?
void Debug(string message, params string[] args); ? ?
? ? ? ? ? ?
void Info(string message, params string[] args); ? ?
? ? ? ? ? ?
void Warn(string message, params string[] args); ?
? ? ? ? ?
void Error(string message, params string[] args);}


  (2)實現ILogger接口:ExceptionlessLogger


public class ExceptionLessLogger : ILogger{ ? ? ?
? ? ??
/// <summary>/// Trace ? ? ? ?
? ? ? ?
/// </summary>public void Trace(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Trace).AddTags(tags).Submit();} ? ? ? ?/// <summary>/// Debug ? ? ? ?/// </summary>public void Debug(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Debug).AddTags(tags).Submit();} ? ? ? ?/// <summary>/// Info ? ? ? ?/// </summary>public void Info(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Info).AddTags(tags).Submit();} ? ? ? ?/// <summary>/// Warn ? ? ? ?/// </summary>public void Warn(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Warn).AddTags(tags).Submit();} ? ? ? ?/// <summary>/// Error ? ? ? ?/// </summary>public void Error(string message, params string[] tags){ExceptionlessClient.Default.CreateLog(message, LogLevel.Error).AddTags(tags).Submit();}}


2.6 注入ExceptionlessLogger

public IServiceProvider ConfigureServices(IServiceCollection services){ ? ? ? ?// IoC - Loggerservices.AddSingleton<ILogger, ExceptionLessLogger>();......}

2.7 在你想要Logging的地方調用

  比如我們要記錄一個User登錄的日志:

public class LoginController : Controller{ ? ?
?? ?
public ILogger Logger { get; } ? ?

? ? ?? ?
public LoginController(ILogger logger){Logger = logger;}[HttpGet("{id}")] ? ? ?
? ? ? ? ??
public string Get(int id){Logger.Info($"User {id} Login Successfully. Time:{DateTime.Now.ToString()}", "Tag1", "Tag2"); ? ?
? ? ? ?
return "Login Success.";}}


  測試結果:

  

2.8 記錄你程序中的各種Exception

  這里模擬一個空指針的異常,這里借助Exceptionless針對Exception類的擴展方法去進行寫異常信息。


? ?[HttpGet] ?
? ?
public string Get(){ ? ? ?
? ? ? ? ??
try{ ? ? ? ?
string str = null;str.ToString();} ? ? ?
? ? ? ? ??
catch (Exception ex){ex.ToExceptionless().Submit();} ? ? ? ?return "Unknown Error!";}


  測試結果:

  

2.9 Check你的日志與異常記錄

  (1)Check 日志

  在Log Messages 或 AllEvents菜單中選擇Dashboard,即可看到當前項目所有的Log Message了。(如果選擇的是AllEvents,可能還會包含其他類型的信息,比如Exception)

  

  在最近的Log中可以看到我們剛剛的測試中記錄的一跳日志:

  

  點擊超鏈接,即可進入詳細頁面:

  Overview:可以看到一些項目和日志的基本信息,比如Event Type,Level以及標簽Tags

  

  Environment:可以看到記錄日志所在的項目所處的一些軟硬件環境信息

  

  下面是一些額外的信息,比如Framework Version以及Runtime Framework

  

  通過對這些日志的查看和分析,我們可以方便地在一個地方對所有服務中的日志進行查看和分析。But,在線版本對項目和日志數量有限制,建議在生產環境使用本地部署版本,它是開源的。

  (2)Check 異常

  在Exception菜單下選擇Dashboard:

  

  在最近的異常信息中找到剛剛記錄的:

  

  同樣,通過超鏈接查看詳細信息:

  Overview:可以看到這個異常的基本信息,比如Error Type以及Stack Trace,這些都是可以幫準我們快速定位錯誤的信息

  

  Exception:如果基本信息不夠,那就查看詳情,你可能需要看看加載了哪些Modules

  

  最后是Environment,跟Log的Environment差不多,這里就不再貼圖了。

三、本地部署

  我們說到Exceptionless是一款強大的開源框架,那么我們可以下載下來根據需要進行獨立部署,可以不受一些用戶、項目、Event數量的限制。這里我暫時不會去做其獨立部署的實踐,但是園子里已經有很多的獨立部署實踐的分享了,有興趣的朋友可以看看下面幾篇:

  花兒笑彎了腰,《Self Host 使用Exceptionless實時監控程序運行日志服務》

  羅曼緹克,《.Net 開源異常日志ExceptionLess搭建》

  平凡網客,《Exceptionless 本地部署》

  當然,官方的獨立部署Wiki也是一個絕佳的參考資料:https://github.com/exceptionless/Exceptionless/wiki/Self-Hosting

  以下是測試環境的要求:

  

  以下是Production環境的要求,我們可以看到在Production環境中,強烈推薦使用ELK的ElasticSearch,如果有不知道ELK的朋友也可以百度/Google一下,ELK也是我后續的學習計劃。

  

四、小結

  本篇主要簡單的介紹了一下開源的分布式日志框架Exceptionless,并通過兩個小例子介紹了如何快速的在ASP.NET Core中進行使用,最后通過在Exceptionless平臺中Check我們在程序中記錄的日志/異常信息了解Exceptionless的強大。此外,通過引入園友和官方的Wiki文檔介紹了Exceptionless的另一種使用模式:本地部署,有興趣的朋友可以去看看,這里我就不再去實踐了(對我現階段而言,去做獨立部署的優先級不高)。本篇沒有過多的語言介紹,更多的是貼code以及貼圖片,因此不能算是很好的介紹文章,不過結合列出的參考資料應該可以對Exceptionless做個快速入門  

  一些朋友問我后續的分享計劃,這里小小透漏一下:Ocelot+IdentityServer的結合做統一驗證和授權,Ocelot+Butterfly的結合(目前Ocelot已集成Butterfly)做分布式追蹤,基于AppMetrics+InfluxDB+Grafana的性能監控,數據一致性(可能會使用幾個EventBus框架)初探,基于Apollo做配置中心,ASP.NET Core on Docker與K8S結合等等。等到POC初步研究后,可能還會去看看微軟的微服務架構官方高級版大Demo-eShopOnContainers(微軟有一本pdf大家可以去下載,點我下載)。這些計劃可能需要花費我很多時間,不過我相信這樣的學習和實踐是值得的,也是值得分享的,如果你也有這樣的計劃,那就一起加油吧!

    

參考資料

Exceptionless Github:https://github.com/exceptionless/Exceptionless

savorboard(楊曉東),《免費開源分布式系統日志收集框架 Exceptionless》

編程夢,《ExceptionLess新玩法 — 記日志》

編程夢,《ExceptionLess新玩法 -- 審計日志》

花兒笑彎了腰,《Self Host 使用Exceptionless實時監控程序運行日志服務》

羅曼緹克,《.Net 開源異常日志ExceptionLess搭建》

平凡網客,《Exceptionless 本地部署》

原文地址:

https://www.cnblogs.com/edisonchou/p/exceptionless_foundation_and_quick_start.html

.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

總結

以上是生活随笔為你收集整理的.NET Core微服务之基于Exceptionless实现分布式日志记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。