我应该抛出Global.asax中Application_Error处理程序中发生的异常吗

本文关键字:程序 异常 处理 Global asax 我应该 Application Error | 更新日期: 2023-09-27 18:00:34

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

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 ? 
    }
}

我应该抛出Global.asax中Application_Error处理程序中发生的异常吗

Application_Error是在线程(目前正在为您的请求提供服务)中止之前,您可以记录异常的最后一个地方。

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

以下是它的合理实现

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

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

  • 是否要在登录后抛出Server.GetLastException()?这取决于例外情况的性质和原因。我会在特殊的占位符或弹出窗口中显示
  • 如果在尝试记录异常时发生抛出异常?那么你肯定想吞下它