首页 > 解决方案 > ASP.NET Core 2.1 应用程序启动失败时在 Application Insights 中创建错误

问题描述

我在我的 ASP.NET Core 2.1 REST 后端中使用 Application Insights,它可以很好地跟踪正常执行期间的错误。但是,当我在应用程序启动期间遇到问题(例如缺少配置)时,进程崩溃并且异常最终出现在显示通用错误页面的 II 中。

我发现我可以通过设置环境变量ASPNETCORE_CAPTURESTARTUPERRORS来控制这种行为,如此处所述以获得详细的错误页面。

但我希望在应用程序洞察力中跟踪这个详细的错误,并在发生此类错误时最终控制应用程序的可用性设置。

有谁知道如何实现这一目标?

标签: azureasp.net-coreazure-application-insights

解决方案


更新 0416:添加 op 提供的解决方案:

通过包装CreateWebHostBuilder(args).Build().Run();在一个try/catch块中并直接使用发送异常TelemetryClient


更新:

对于ASP.NET core 2.1,是可以的(在我这边验证过,注意:这里不用ILogger,它可以自动收集program.cs或startup.cs中未处理的异常)。您可以在 Program.cs 中添加以下代码:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .ConfigureLogging(
        builder =>
            {

            builder.AddApplicationInsights("ikey");    

            builder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>
                             (typeof(Program).FullName, LogLevel.Trace);    

            builder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>
                             (typeof(Startup).FullName, LogLevel.Trace);
            }
        );

更多详情,您可以参考这篇文章


原答案:

不幸的是,log errors during startup不支持。

这是官方文档,它指出:

有许多异常过滤器无法处理的情况。例如:

1.控制器构造函数抛出的异常。

2.消息处理程序抛出的异常。

3.路由过程中抛出的异常。

4.响应内容序列化过程中抛出的异常。

5.应用程序启动时抛出异常。

6.后台任务抛出异常。


推荐阅读