【问题标题】:Get All Exception messages, including InnerException in C#获取所有异常消息,包括 C# 中的 InnerException
【发布时间】:2018-07-25 12:48:37
【问题描述】:

如何轻松获取所有异常消息(包括 C# 中的 InnerExceptions)以输出到控制台或记录?

【问题讨论】:

  • 显示您尝试过的内容以及遇到的问题。
  • ...例如输出到控制台用于日志记录根据日志记录框架,他们只接受一个异常,他们将递归地记录它内部异常。有点过于宽泛和基本的问题恕我直言。
  • 这个问题的想法是做一些知识共享,因为我在寻找它的时候找不到一个简洁的答案,所以希望这个问题可以让人们更容易找到一个好的未来的解决方案。
  • 已经存在:stackoverflow.com/questions/5928976/…。无需重新发明那个轮子。有人可以将其作为副本关闭吗?

标签: c# exception inner-exception


【解决方案1】:

最简单的方法是编写递归函数:

例如:

    public static string ExceptionMessages(Exception ex)
    {
        if (ex.InnerException == null)
        {
            return ex.Message;
        }

        return ex.Message + "  " + ExceptionMessages(ex.InnerException);

    }

这将在单个字符串中输出所有消息。

【讨论】:

    【解决方案2】:

    通常你只是循环:

    catch (Exception ex)
    {
        while (ex != null)
        {
            Console.Error.WriteLine(ex.Message);
            ex = ex.InnerException;
        }
    }
    

    【讨论】:

    • @Sinatr 在细节与上下文之间存在权衡;当有很多内部异常时(XmlSerializer 是一个野兽!),ToString() 实在是太庞大了,只要查看.Message 输出就会很快告诉你问题。这取决于上下文,这就是我所说的。是的,有时ex.ToString() 会很好
    猜你喜欢
    • 2012-03-08
    • 2023-03-08
    • 2020-01-09
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    相关资源
    最近更新 更多