在企业库中,我没有将足够的详细信息放入我的日志中,所以我开始编写这个处理程序来提取异常特定的属性并将它们添加到消息字符串中:
[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 header ...
然后您的异常记录代码可以获取 Exception.Data 并将所有信息添加到日志中。
以这种方式处理异常时,您不需要包装异常,也不需要丢失任何调用堆栈。使用 throw
重新抛出原始异常,在堆栈的更深处再次捕获它,向其上的 .Data
添加更多上下文,依此类推,直到到达异常处理程序.
关于c# - 我应该如何在 webexception、soap exception 等中记录额外的详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7081248/