【问题标题】:Should I throw out an exception that happen in Application_Error handler in Global.asax?我应该抛出 Global.asax 的 Application_Error 处理程序中发生的异常吗?
【发布时间】:2013-02-07 17:12:57
【问题描述】:

aspx.cs 中未处理的错误代码将被 global.asax 中的 Application_Error 处理程序捕获。
我在 Application_Error 处理程序中编写了一些代码来记录在 aspx.cs 中发生的此类未处理的错误
但是如果日志本身的代码也失败并产生了异常。(可能是由于I/O或文件系统问题)
我应该抛出这样的异常吗?
如果我把它扔掉,哪个事件应该收到这样的异常?
或者我是否写“抛出”语法没有区别?
代码示例如下

protected void Application_Error(object sender, EventArgs e)
{
    try
    {
        // my codes to log exception to Database System here....
    }
    catch(Exception)
    {
        throw;  //Should I write "throw" syntax here ? 
    }
}

【问题讨论】:

    标签: c# asp.net exception-handling global-asax


    【解决方案1】:
    • 你想在登录后抛出Server.GetLastException()吗?这取决于该异常的性质和原因。我会在特殊的占位符或弹出窗口中显示它
    • 如果在尝试记录该异常时发生抛出异常?那么你肯定会想吞下它

    【讨论】:

      【解决方案2】:

      Application_Error 是您可以记录在线程(目前正在处理您的请求)被中止之前发生的异常的最后一个位置。

      你不需要抛出任何异常,因为它会在函数退出后自动抛出。

      这是一个合理的implementation

      我认为您最关心的是如果您的故障转移机制出现故障该怎么办。在这种情况下,它是您的日志记录。这在计算机中是一个更大的问题,但构建链式故障转移机制通常是浪费时间,因为最终一切可能都会失败(对您自己的研究的建议:尽量保持一切无状态) .你最好的办法是拥有一个非常可靠的日志记录机制作为你最后的手段,这将在 99.9% 的时间内成功。不打算讨论如何创建这样的机制(而且自己做也不是一个好主意 - 无论如何都要创建自己的记录器,因为有很多技巧需要知道以确保您的日志记录足够高效且不突兀)但总的来说,我建议您使用elmah,它可能是目前可用的最好的日志记录框架,它将为您服务。

      对于可能会出现的极少量错误(在现实生活中它们可能不会),我不会因为它们而失眠。

      【讨论】:

        猜你喜欢
        • 2012-08-26
        • 1970-01-01
        • 1970-01-01
        • 2020-03-25
        • 2013-05-20
        • 2012-12-07
        • 1970-01-01
        • 2010-11-24
        • 2011-12-12
        相关资源
        最近更新 更多