亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 ASP.NET Core 啟動期間使用 Serilog 和 Sentry

在 ASP.NET Core 啟動期間使用 Serilog 和 Sentry

C#
守著一只汪 2022-12-31 11:11:15
我正在嘗試將應用程序啟動期間拋出的錯誤記錄到哨兵。我正在使用帶有 Serilog 和 Sentry 的 ASP.NET Core 2.1.2。如果我只使用哨兵,它似乎工作正常。WebHost.CreateDefaultBuilder(args)    .UseSentry("dsn")    .UseStartup<Startup>()    .Build()    .Run();但是,如果我添加 Serilog,該應用程序在啟動期間不會發送任何事件,但如果控制器操作引發異常,它仍會繼續工作。WebHost.CreateDefaultBuilder(args)    .UseSerilog(        (hostingContext, loggerConfiguration) =>            loggerConfiguration                .Enrich.FromLogContext()                .MinimumLevel.Debug()                .WriteTo.Console()                .WriteTo.Sentry(s => {                    s.MinimumBreadcrumbLevel = LogEventLevel.Debug;                    s.MinimumEventLevel = LogEventLevel.Error;                }))    .UseSentry("dsn")    .UseStartup<Startup>()    .Build()    .Run();我正在嘗試從Startup 類中的ConfigureServices和方法登錄:Configurepublic class Startup{    public Startup(IConfiguration configuration, ILogger<Startup> logger)    {        Configuration = configuration;        Logger = logger;    }    public IConfiguration Configuration { get; }    public ILogger<Startup> Logger { get; }    public void ConfigureServices(IServiceCollection services)    {        Logger.LogError(new Exception("something went wrong while configuring services"), "ERROR");        services            .AddMvc()            .AddJsonOptions(options =>            {                options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";            })            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);    }    public void Configure(IApplicationBuilder app, IHostingEnvironment env)    {        Logger.LogError(new Exception("something went wrong while configuring app"), "ERROR");    }}我想這與每個記錄器的初始化順序有關,但我對啟動過程的了解不足以提出解決方案或至少是解釋。知道為什么會發生這種情況,我該如何解決?
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

ASP.NET Core 日志基礎結構是在應用程序請求管道之前構建的。出于這個原因,我們只能通過日志集成捕獲應用程序啟動期間發生的異常。

 使用時捕獲應用程序初始化錯誤的原因Sentry.AspNetCore是此包依賴于Sentry.Extensions.Logging.

當您這樣做時UseSentry,它會在內部掛鉤到框架日志基礎結構中。類中的崩潰Startup發生在應用程序實際構建之前(完成ConfigureServicesConfigure需要啟動應用程序),因此只有使用日志記錄集成,我們才能在此時捕獲錯誤。

添加Serilog到您的應用程序后,默認的日志記錄后端將被替換。這意味著現在已經接管了對日志記錄基礎設施的掛鉤Sentry.Extensions.Logging不再生效。Serilog

因此,您也需要添加包Sentry.Serilog。Serilog在這種情況下,添加兩個包后,只有當您通過集成初始化 SDK(就像您根據上一條評論所做的那樣)時,您才能捕獲引導錯誤。為了避免混淆(為什么我需要兩次提供我的 DSN?),示例中沒有這樣做,但在幕后發生的事情是,由 Serilog 完成的第一次初始化只有在該Startup過程完成之前才真正有用。初始化Sentry.AspNetCore后,它將關閉Serilog集成創建的第一個客戶端并刷新所有事件并將新客戶端添加到主范圍。這確保請求數據之類的東西也被添加到事件中。


查看完整回答
反對 回復 2022-12-31
  • 1 回答
  • 0 關注
  • 171 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號