【问题标题】:Create Error in Application Insights when Startup of ASP.NET Core 2.1 Application failsASP.NET Core 2.1 应用程序启动失败时在 Application Insights 中创建错误
【发布时间】:2020-07-15 13:20:33
【问题描述】:

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

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

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

有人知道如何实现吗?

【问题讨论】:

    标签: azure asp.net-core azure-application-insights


    【解决方案1】:

    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);
                }
            );
    

    更多详情可以参考这个article


    原答案:

    很遗憾,不支持log errors during startup

    这是official doc,上面写着:

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

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

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

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

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

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

    6.后台任务抛出异常。

    【讨论】:

    • 不确定此信息是否适用于 .NET Core 应用程序 AS 链接的文章指出:“本文从代码示例的角度特别关注 .NET Framework 应用程序。一些适用于.NET Framework 在 .NET Core SDK 中已过时。如果您有 .NET Core 应用程序,请参阅 .NET Core SDK 文档。"
    • @MarkusS。好点,我会检查它是否可用于 .NET core 并让您知道结果。
    • @MarkusS。对于 asp.net core 2.1,请参阅答案中的更新部分。
    • 嗨伊万!抱歉耽搁了。您的回答在某种程度上很有帮助,因为它为我指明了正确的方向,但不幸的是并没有解决问题。我在 Startup 类中看不到由 ConfigureServices 方法生成的异常(因为这是在我缺少配置值时发生异常的地方)。但是我能够通过包装 CreateWebHostBuilder(args).Build().Run(); 来解决它在 try/catch 块中并使用 TelemetryClient 直接发送异常。
    • @MarkusS。伟大的!我做了同样的测试并工作。无论如何,我通过包含您的解决方案更新了答案。如果你不介意,你能接受它作为答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2019-12-21
    相关资源
    最近更新 更多