.net 4.0 使用Microsoft企业库异常处理程序检索参数值

.net 4.0 使用Microsoft企业库异常处理程序检索参数值,.net-4.0,enterprise-library,.net 4.0,Enterprise Library,我们在应用程序中使用企业库满足所有日志记录和异常处理需求。我们添加了一个电子邮件侦听器,将电子邮件中捕获的所有异常发送给管理员。一个要求是,当方法中发生异常时,我们需要检索该方法的参数值(如果有),并将其附加到发送的电子邮件中的异常详细信息。是否可以不编写自定义记录器?只需创建一个自定义异常,将消息设置为参数: try { ... } catch(Exception ex) { var customException = new CustomException(ex, string.fo

我们在应用程序中使用企业库满足所有日志记录和异常处理需求。我们添加了一个电子邮件侦听器,将电子邮件中捕获的所有异常发送给管理员。一个要求是,当方法中发生异常时,我们需要检索该方法的参数值(如果有),并将其附加到发送的电子邮件中的异常详细信息。是否可以不编写自定义记录器?

只需创建一个自定义异常,将消息设置为参数:

try {
  ...
} catch(Exception ex) {
  var customException = new CustomException(ex, string.format("Param1 {0}, Param2 {1}", param1, param2));
  bool rethrow = ExceptionPolicy.HandleException(customException, PolicyName);
}
验证了ExceptionFormatter类实际上将遍历所有内部异常,因此您的CustomException可以像

public class CustomException : Exception
{
    public CustomException(string message, Exception innerException) : base(message, innerException)
    {
    }
}

谢谢我要试试这个。但是,如果我们这样做,现有的异常详细信息会保持不变吗?如果您编写CustomException以便它将ex传递给基本异常类,那么它应该这样做。取决于格式化程序是否输出InnerException详细信息。我不确定最后一项。。。我已经有一段时间没有玩弄异常块了……事实上,您可以扩展并编写一个新的异常格式化程序。实际上似乎没有那么复杂。。。然后,您的CustomException可以加载您想要的所有数据,并且您可以在ExceptionFOrmatter类中处理它。很抱歉发送内容,但是查看ExceptionFOrmatter源,它确实会输出InnerException(如果存在)。感谢您查找详细信息,Bryce。