gpt4 book ai didi

c# - 使用 Controller 级别的异常日志记录 (IExceptionFilter.OnException) 时会漏过哪些异常?

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:42 24 4
gpt4 key购买 nike

我有一个 MVC3 应用程序,在这个应用程序中,正确记录生产中可能发生的所有错误非常重要。

当前方法使用 IExceptionFilter.OnException。该功能应用在 BaseContorller 上,所有其他 Controller 都继承自它,看起来(稍微简化)如下:

public class BaseController : Controller, IExceptionFilter
{
protected override void OnException(ExceptionContext exceptionContext)
{
Logger.Error(exceptionContext.Exception);
}
}

这种方法非常有效,适用于:

  • 源自 Controller 操作方法中代码的异常

  • 源自 Controller 方法返回的 View 的异常,包括编译错误

  • 应用于 Controller 的过滤器中的异常

但是也有使用这种方法不会被捕获的异常:

  • 在 Controller 构造函数中抛出异常
  • 应用例程中抛出的异常,例如:RegisterGlobalFilters、RegisterRoutes、Application_Start
  • 找不到页面 (404)

您是否可以想到 Controller 级别异常处理可能会遗漏的任何其他类型的异常?

我问是因为我可能会使用 Application_Error 或 ELMAH 实现额外的日志记录层,并且我想验证这些异常中没有一个未被记录。

最佳答案

任何不通过 MVC 管道的东西都不会被这个实现捕获。 HttpHandlers、WebAPI 实现、ServiceStack 添加等。

再涂一层 Elmah 不会有什么坏处,但我可能只会选择其中一层。如果将错误处理分段,调试时的工作量可能会翻倍。

“是我的记录器捕获了它还是 Elmah 捕获了它?”

由于 Elmah 接近 ASP.NET 金属,我会坚持使用 Elmah 并将您的异常放在一个地方。

 NuGet Install-Package Elmah.MVC

附带说明一下,您可能仍希望记录器进行跟踪,但这在您的代码中比未处理的异常更明确地表达。

 Logger.Info("Just got another Sale, W00t!")

关于c# - 使用 Controller 级别的异常日志记录 (IExceptionFilter.OnException) 时会漏过哪些异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com