Elmah的异常处理
本文关键字:异常处理 Elmah | 更新日期: 2023-09-27 18:11:11
我用Elmah记录异常,并想知道我使用的技术是否设计良好?
现在,我捕获和重新抛出发生在各种类和方法中的异常,并将它们记录在程序的主try-catch块中的Elmah中。
//主程序
try
{
// Some code that fires off other classes, etc...
MyTestClass myTestClass = new MyTestClass();
myTestClass.Execute();
}
catch(Exception ex)
{
ErrorSignal.FromCurrentContext().Raise(ex);
}
//MyTestClass
public class MyTestClass
{
public object ApiResult { get; set; }
public string Execute()
{
try
{
// execute some code
// ....
// set xml message
ApiResult = "User information xml response";
}
catch (Exception ex)
{
// set xml message
ApiResult = "something went wrong xml error response...";
throw;
}
}
}
记录发生的异常会更好吗?另一个问题是,我是否应该记录我可以处理而不会捕获异常的错误?例如,如果某些东西是空的,我应该做一个测试(如果空…),并在Elmah日志消息吗?
与其使用Elmah的ErrorSignal
类手动记录错误,不如让Elmah自动为您记录错误,当应用程序的Error
事件被引发时就会发生。
简而言之,try...catch
块只应该谨慎使用,例如在您可以从错误中恢复的情况下,或者当错误是一个"小"错误并且不应该停止工作流时。但大多数错误都是真正的阻碍,没有优雅的解决方案。对于大多数情况,您可能希望让错误渗透到ASP中。. NET运行时,ELMAH将自动记录它,并且用户将看到一个错误页面,提醒他们发生错误的事实。
我认为下面的情况会给你一个想法,什么时候使用ErrorSignal.FromCurrentContext().Raise(ex);
var bo = new CustomerBO();
bo.Update(customer);
try
{
Email.SendProfileChangedNotification();
}
catch(Exception ex)
{
ErrorSignal.FromCurrentContext().Raise(ex);
}
Response.Redirect(Constants.ProfilePage);
电子邮件。SendProfileChangedNotification方法在这段代码中不是很重要,我的意思是,如果它有任何错误,我可以离开它,我不想向用户显示它们。重要的是,他/她的个人资料被更新了,用户通过查看个人资料页面知道了这一点。
所以我相信代码中有可能经常失败的地方,我希望得到关于它们的通知,但我不想破坏整个操作。