.net core 集成 sentry 進行例外報警
Intro
Sentry 是一個實時事件日志記錄和匯集的平臺,其專注于錯誤監控以及提取一切事后處理所需資訊而不依賴于麻煩的用戶反饋,它分為客戶端和服務端,客戶端(目前客戶端有 C#, Python, PHP, JavaScript, Ruby等多種語言)就嵌入在你的應用程式中間,程式出現例外就向服務端發送訊息,服務端將訊息記錄到資料庫中并提供一個web頁方便查看,
Sentry 是 Python 寫的一個開源的專案 https://github.com/getsentry/sentry 而且可以滿足私有部署的需求
官方介紹:
Sentry is cross-platform application monitoring, with a focus on error reporting.
Sentry fundamentally is a service that helps you monitor and fix crashes in realtime. The server is in Python, but it contains a full API for sending events from any language, in any application
使用效果
sentry 里每一個錯誤/例外被視為一個 issue,在 sentry 的后臺可以看到對應專案的錯誤資訊,并且會受到 sentry 的郵件推送


dotnetcore 集成
針對 asp.net core 的集成,分為兩種方式,sentry 提供了一個底層一點的基于 Microsoft.Extensions.Logging 的集成方式(Sentry.Extensions.Logging)和基于 asp.net core 框架的集成方式(Sentry.AspNetCore),我目前在用基于 logging 方式的集成方式(基于 asp.net core 的集成是后來才有的,后面也沒有再修改),如果要集成 asp.net core 專案可以直接使用 Sentry.AspNetCore
我目前用的是 Sentry.Extensions.Logging 基本配置如下:
loggerFactory
.AddSentry(options =>
{
options.Dsn = Configuration.GetAppSetting("SentryClientKey");
});
Dsn 是創建專案之后在專案的配置里可以看得到

More Config
loggerFactory
.AddSerilog()
.AddSentry(options =>
{
options.Dsn = Configuration.GetAppSetting("SentryClientKey");
options.Environment = env.EnvironmentName; // 設定環境
options.MinimumEventLevel = LogLevel.Error; // 設定 sentry event 級別
});
修改 sentry event 資訊,對于發生的錯誤例外可以在發送到 sentry 服務器端之前做修改,對于要忽略的例外也可以在這個事件中做,比如系統中的 TaskCanceledException ,我在使用異步查詢方法的時候會傳遞一個 CancellationToken ,客戶端中斷了請求就會導致這個 Token 的 Cancel 事件被觸發,EF 就會報一個 TaskCanceledException 前段時間,sentry 經常會給我發一些例外郵件,全都是 TaskCanceledException,我們可以在這個事件里判斷如果例外時 TaskCanceledException 就回傳一個 null, 這樣這個例外就不會被提交到 sentry 服務器端了
options.BeforeSend = (sentryEvent) =>
{
// ignore TaskCanceledException/OperationCanceledException
if (sentryEvent.Exception is TaskCanceledException ||
sentryEvent.Exception is OperationCanceledException)
{
return null;
}
return sentryEvent;
};
More
除了基本的例外資訊的展示和推送,sentry 還會做例外資訊的聚合,相同的例外資訊只會展示為一個,還可以做 issue 的分發指派,還可以和 Github、Gitlab 等第三方服務集成,在 Github 中創建 issue 等,更多用法等待著你去發現
Reference
- https://github.com/getsentry/sentry
- https://docs.sentry.io/platforms/dotnet/microsoft-extensions-logging/
- https://docs.sentry.io/platforms/dotnet/aspnetcore/
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/44873.html
標籤:.NET Core
