我只注册了这样的数据库记录器:
loggerFactory.AddDatabaseLogger(logRepository,serviceProvider,LogLevel.Error);
之后,我所有未处理的错误都会记录到数据库中。 当我添加自定义错误过滤器时,所有未处理的错误都会被记录两次。
services.AddMvc(config =>
{
config.Filters.Add(new CustomExceptionFilter(_loggerFactory));
});
最新版本的ASP.NET 5 RC2是否不需要创建自定义全局异常过滤器?
答案 0 :(得分:4)
异常过滤器是MVC概念,因为即使在MVC之外也可能发生未处理的异常,只有使用ExceptionFilters可能还不够。
如果您想在一个中心位置处理所有未处理的异常,我认为您可以使用ExceptionHandlerMiddleware
。该中间件可以选择执行控制器的操作。示例:app.UseExceptionHandler(errorHandlingPath: "/Home/Error");
在Error
操作中,您可以记录异常详细信息。您可以通过执行以下操作来检索异常详细信息:
var exceptionHandlerFeature = HttpContext.Features.Get<IExceptionHandlerFeature>();
var exception = exceptionHandlerFeature.Error;
另外,如果您正在编写异常过滤器,则应在异常过滤器中执行以下操作以停止再次传播异常。可能这就是你两次看到日志条目的原因。
exceptionContext.ExceptionHandled = true;