【问题标题】:Retrieving parameter values using Microsoft Enterprise Library Exception Handler使用 Microsoft 企业库异常处理程序检索参数值
【发布时间】:2010-10-06 01:56:22
【问题描述】:

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

【问题讨论】:

    标签: .net-4.0 enterprise-library


    【解决方案1】:

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

    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”传递给它应该的基 Exception 类。取决于 Formatter 是否输出 InnerException 详细信息。我不确定最后一项...我已经有一段时间没有玩过异常块了...
    • 实际上,您可以扩展并编写一个新的 ExceptionFormatter msdn.microsoft.com/en-us/library/ff664587(v=PandP.50).aspx。实际上似乎没有涉及...然后,您的 CustomException 可以加载您想要的所有数据,并且您可以在 ExceptionFOrmatter 类中处理它。
    • 抱歉垃圾内容,但查看 ExceptionFormatter 源,它确实输出了 InnerException(如果存在)。
    • 感谢您提供详细信息,布莱斯。
    猜你喜欢
    • 2012-04-30
    • 1970-01-01
    • 2012-12-27
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多