哪种Insights实现可以确保记录所有异常



我们有一个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来跟踪这些异常。

引用的文档在这里。

最新更新