【问题标题】:How do you do Error handling (especially SQL) in an ASP.NET project right您如何正确处理 ASP.NET 项目中的错误处理(尤其是 SQL)
【发布时间】:2025-12-12 12:50:02
【问题描述】:

我有另一个正在工作的 ASP.Net Web 项目,我已经从不同的角度进行了错误处理。我只是想知道是否有经验丰富的开发人员有任何建议。

关于 ASP.net 的良好日志记录框架的讨论加分:)

【问题讨论】:

    标签: asp.net error-handling


    【解决方案1】:

    这取决于您的应用程序所针对的环境。但是我所做的是在 web.config 的 customErrors 部分中重定向到一个通用的 ErrorHandler.aspx 页面,然后我不处理和隐藏的任何异常都会导致页面重定向到允许错误处理程序的错误处理程序用户知道发生了什么,并允许他们选择报告。

    我建议从 System.Exception 派生一些内容,以便您为 ErrorHandler.aspx 页面指定更多细节,例如 FriendlyMessage 属性。

    【讨论】:

    • 那么您是否会重定向到错误页面并通过 URL 或在会话中传递友好的错误消息,并可能调用全局错误处理以向网站管理员和开发人员发送电子邮件?
    • 您添加一个全局应用程序类(Global.asax - 查看“添加项目”窗口,您会看到它),然后在 Application_UnhandledError(类似的东西)中将 Server.GetLastError() 保存到某处的一些静态属性(我有一个具有静态异常属性的 ErrorUtil 类)
    • 然后您从 ErrorHandler.aspx 访问该属性。在极高负载的应用程序中,thig 可能会导致问题(在生成错误页面之前被覆盖,但我不确定)虽然我不必担心我在哪里工作
    【解决方案2】:

    我使用 Application_Error() 事件来获取未处理的异常。我使用 Application.Log() 方法将它们写入日志,然后将它们重定向到用户友好的错误页面。

    Application.Log() 可以使用 web.config 文件进行配置,以将输出定向到文件、服务器上的事件日志等。

    在某些情况下,我还使用通用 TraceSource 和将消息记录到数据库表的自定义侦听器实现了自己的日志记录。

    【讨论】:

      【解决方案3】:

      我使用了 ELMAH,(错误记录模块和处理程序)是一个应用程序范围的错误记录工具,它是完全可插拔的,在多个项目中运行良好: http://code.google.com/p/elmah/

      我还使用了 ASP.NET 2.0 中的内置健康监控: http://msdn.microsoft.com/en-us/library/ms998306.aspx

      【讨论】: