其他分享
首页 > 其他分享> > 我应该如何在webexception,soap异常等中记录额外的详细信息?

我应该如何在webexception,soap异常等中记录额外的详细信息?

作者:互联网

在企业库中,我没有在日志中放入足够的详细信息,因此我开始编写此处理程序以提取特定于异常的属性并将其添加到消息字符串中:

[ConfigurationElementType(typeof(CustomHandlerData))]
public class ExposeDetailExceptionHandler : IExceptionHandler
{
    public Exception HandleException(Exception exception, Guid handlingInstanceId)
    {
        if (exception is System.Net.WebException) 
            return ExposeDetail((System.Net.WebException)exception);
        if (exception is System.Web.Services.Protocols.SoapException) 
            return ExposeDetail((System.Web.Services.Protocols.SoapException)exception);

        return exception;
    }

    private Exception ExposeDetail(System.Net.WebException Exception)
    {
        string details = "";
        details += "System.Net.WebException: " + Exception.Message + Environment.NewLine;
        details += "Status: " + Exception.Status.ToString() + Environment.NewLine;

        return new Exception(details, Exception);
    }

    private Exception ExposeDetail(System.Web.Services.Protocols.SoapException Exception)
    {
        //etc
    }
}

(顺便说一句,还有一种更好的方法来选择运行哪个版本的ExposeDetail?)

这是记录这些详细信息的最佳方法还是公认的方法,我最初的想法是我应该实现ExceptionFormatter,但这似乎要简单得多.

解决方法:

使用Exception.Data.您可以在首次捕获到异常时收集要记录的所有其他详细信息,并将它们添加到Exception.Data中.您还可以添加不属于原始异常的其他信息,例如Url,http标头等.

然后,您的异常日志记录代码可以提取Exception.Data并将所有这些信息添加到日志中.

这样处理时,您无需包装异常,也无需丢失任何调用堆栈.使用throw抛出原始异常,再次将其捕获到堆栈上方,向其上的.Data添加更多上下文,依此类推,直到到达异常处理程序为止.

标签:error-handling,enterprise-library,enterprise-library-5,c
来源: https://codeday.me/bug/20191208/2088517.html