我有一个用C#.NET构建的网站,它倾向于从各种用户控件产生相当稳定的SQL超时流,我想轻松地弹出一些代码来捕获所有未处理的异常并将它们发送到可以记录它们并显示一个对用户友好的消息.
通过最小的努力,我如何捕获所有未处理的异常?
这个问题似乎说这是不可能的,但这对我来说没有意义(它与Windows应用程序中的.NET 1.1有关):
所有未处理的异常最终都通过global.asax中的Application_Error传递.因此,要提供常规异常消息或执行日志记录操作,请参阅Application_Error.
如果你需要在所有线程中捕获exeptions,最好的方法是实现UnhandledExceptionModule并将它添加到你的应用程序中这里看 一个例子
使用Global.asax文件中的Application_Error方法.在Application_Error方法实现中调用Server.GetLastError(),根据需要记录Server.GetLastError()返回的异常的详细信息.
例如
void Application_Error(object sender, EventArgs e) { // Code that runs when an unhandled error occurs log4net.ILog log = log4net.LogManager.GetLogger(typeof(object)); using (log4net.NDC.Push(this.User.Identity.Name)) { log.Fatal("Unhandled Exception", Server.GetLastError()); } }
不要过多关注log4net的东西,Server.GetLastError()是最有用的一点,记录你喜欢的细节.
该ELMAH项目听起来很值得一试,它的功能列表包括:
ELMAH(错误记录模块和处理程序)是一个完全可插拔的应用程序范围的错误记录工具.它可以动态添加到正在运行的ASP.NET Web应用程序,甚至是计算机上的所有ASP.NET Web应用程序,而无需重新编译或重新部署.
记录几乎所有未处理的异常.
用于远程查看重新编码的异常的整个日志的网页.
用于远程查看任何一个已记录异常的完整详细信息的网页.
在许多情况下,您可以查看ASP.NET为给定异常生成的原始黄色死亡屏幕,即使关闭了customErrors模式也是如此.
每个错误发生时的电子邮件通知.
来自日志的最后15个错误的RSS提要.
日志的许多后备存储实现
更多关于使用dotnetslackers的ELMAH
您可以订阅该AppDomain.CurrentDomain.UnhandledException
活动.