【问题标题】:Would it make sense to add logging in MVC controller OnException () if I also have logging in Application_Error()?如果我在 Application_Error() 中也有日志记录,那么在 MVC 控制器 OnException() 中添加日志记录是否有意义?
【发布时间】:2013-02-21 06:58:58
【问题描述】:

在我的 ASP.NET MVC3 应用程序中,我希望记录所有意外问题。所以我已经登录到Application_Error()。我还发现有 Controller.OnException() 方法,因此我为记录错误的控制器进行了覆盖,然后调用 base.OnException()

看起来每次在控制器操作中发生异常时,都会调用我的 OnException() 覆盖,然后调用 Application_Error(),因此会执行两次日志记录。

如果我取消我的OnException() 覆盖并只保留登录Application_Error(),我是否仍会记录所有问题或者我会错过任何类型的事件?

【问题讨论】:

    标签: asp.net .net asp.net-mvc iis


    【解决方案1】:

    Controller.OnException() 是特定于 MVC 的。 Application_Error() 是特定于 ASP.NET 的。 MVC 位于 ASP.NET 之上,因此如果您在 Controller.OnException() 中处理异常,您可能需要将 ExceptionContext 的 ExceptionHandled 设置为 true,以便它不会沿着管道传播到 Application_Error()。

    你是对的,每个错误都可以被允许传播到 Application_Error() 级别并在那里处理。我认为这真的取决于选择和偏好。我是双向的。我看到了在控制器的 OnException 中处理特定于操作方法的错误以及在 Application_Error 中请求甚至没有到达控制器时(例如启动错误、404s)的其他错误的好处。如果您有一个同时使用 MVC 和 Web 表单的混合应用程序,则 Application_Error 必须用于 Web 表单错误。

    因此,虽然在 Application_Error() 中处理异常是确保您的应用没有未捕获的异常的必要条件,但使用 Controller.OnException() 是处理特定错误子集的首选问题。

    【讨论】:

    • 交易是我并没有真正“处理”这些异常 - 我只是记录它们并让它们传播。
    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    相关资源
    最近更新 更多