使用Elmah进行异常处理

cho*_*obo 1 c# error-handling web-services elmah exception

我用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);
}
Run Code Online (Sandbox Code Playgroud)

// 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;
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

将异常记录在哪里会更好吗?另一个问题,我应该记录我可以处理的错误而不会捕获异常吗?例如,如果某些内容为null,我应该对其进行测试(如果为null ...)并在Elmah中记录消息吗?

Sco*_*ell 9

ErrorSignal您应该尝试让ELMAH自动记录错误,而不是手动记录使用Elmah 类的错误,这会在Error引发应用程序事件时发生.

在您的示例中,主程序存在严重问题.也就是说,至少对最终用户来说,它正在吞噬异常.是的,异常是在ELMAH中记录,但是您正在隐藏用户的错误.最终用户会认为她的表单提交(或其他)没有错误,但实际上存在严重问题.

简而言之,try...catch只应谨慎使用块,例如在您可以从错误中恢复或错误是"次要"错误的情况下,并且不应该停止工作流程.但是大多数错误都是真正的阻止,并没有优雅的解决方法.对于大多数人,您希望让错误渗透到ASP.NET运行时,ELMAH将自动将其记录在该运行时,并且用户将看到错误页面,并提醒他们发生错误.

查看我的这篇文章:ASP.NET Web应用程序的异常处理建议.