哪个 Insights 实现保证记录所有异常?

Which Insights implementation guarantees all exceptions get logged?

我们有一个包含此代码的 global.asax.cs 文件...

方法一

public class WebApiApplication : System.Web.HttpApplication
{
    TelemetryClient _telemetry = new TelemetryClient(new Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration() {
        InstrumentationKey = EnvironmentHelper.InstrumentationKey,
        ConnectionString = EnvironmentHelper.AppInsightsConnectionString
    });

    protected void Application_Start()
    {
        HttpConfiguration config = GlobalConfiguration.Configuration;

        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

我担心这不会将所有异常记录到 Insights。使用此代码会更好吗?...

方法二

public class WebApiApplication : System.Web.HttpApplication
{
    TelemetryClient _telemetry = new TelemetryClient(...);

    protected void Application_Start()
    {
        HttpConfiguration config = GlobalConfiguration.Configuration;

        config.Filters.Add(new CustomExceptionFilter()); // ADDED LINE

        GlobalConfiguration.Configure(WebApiConfig.Register);
    }

    protected void Application_Error(Object sender, EventArgs e) // ADDED METHOD
    {
        Exception appException = Server.GetLastError();
        _telemetry.TrackException(appException);
    }
}

// ADDED CLASS
public class CustomExceptionFilter : ExceptionFilterAttribute
{
    TelemetryClient _telemetry = new TelemetryClient(...);

    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        _telemetry.TrackException(actionExecutedContext.Exception);
        base.OnException(actionExecutedContext);
    }
}

这些方法是否相同,还是一种更可靠?

不知道你是什么意思all exceptions get logged

实际上,Application Insights 会为 WebAPI 2+ 自动收集控制器方法中抛出的未处理异常,以下情况除外:

  • 控制器构造函数抛出异常。
  • 消息处理程序抛出异常。
  • 路由期间抛出异常。
  • 响应内容序列化期间抛出异常。
  • 应用程序启动期间抛出异常。
  • 后台任务抛出异常。

而对于应用程序处理的其他异常,仍然需要手动跟踪。您可以使用 telemetryclient 来跟踪这些异常。

引用的文档是here