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

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

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

最佳答案

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

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

这是一个合理的implementation它的。

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

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

关于c# - 我应该抛出 Global.asax 的 Application_Error 处理程序中发生的异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15018190/

相关文章:

c# - .NET Core 应用程序中的 .NET Framework 依赖项

c# - 使用无效枚举值序列化对象

python - 分别处理特定(针对io)的异常

asp.net - session []保留数据多长时间?

c# - 雅虎联系人 api asp.net c#

wcf - 如何将WCF异常传达给WebClient

ruby-on-rails-3 - 如何拯救来自 Rails 3.2 中间件的自定义异常?

c# - 当我将对象类型保存到集合中时,泛型是否进行装箱/拆箱

c# - 返回日期和时间值的日期类型列

asp.net - iis 7 和 .net Framework 4.0 beta 2