哪个 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。
我们有一个包含此代码的 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。