我有正在记录的代码Exception.Message。但是,我阅读了一篇文章,其中指出最好使用Exception.ToString(). 使用后者,您可以保留有关错误的更多关键信息。
Exception.Message
Exception.ToString()
这是真的吗,继续替换所有代码日志记录是否安全Exception.Message?
我还在为log4net使用基于 XML 的布局。是否Exception.ToString()可能包含可能导致问题的无效 XML 字符?
Exception.Message仅包含与异常关联的消息 (doh)。例子:
你调用的对象是空的
该Exception.ToString()方法将提供更详细的输出,包含异常类型、消息(来自之前的)、堆栈跟踪以及所有这些内容,用于嵌套/内部异常。更准确地说,该方法返回以下内容:
ToString 返回旨在被人类理解的当前异常的表示。如果异常包含文化敏感数据,则 ToString 返回的字符串表示需要考虑当前系统文化。尽管对返回字符串的格式没有确切的要求,但它应该尝试反映用户感知的对象的值。 ToString的默认实现获取抛出当前异常的类名、消息、内部异常调用ToString的结果、调用Environment.StackTrace的结果。如果这些成员中的任何一个是空引用(在 Visual Basic 中为 Nothing),则其值不包含在返回的字符串中。 如果没有错误消息或者是空字符串 (“”),则不返回错误消息。仅当内部异常的名称和堆栈跟踪不是空引用(在 Visual Basic 中为 Nothing)时才返回它们。
ToString 返回旨在被人类理解的当前异常的表示。如果异常包含文化敏感数据,则 ToString 返回的字符串表示需要考虑当前系统文化。尽管对返回字符串的格式没有确切的要求,但它应该尝试反映用户感知的对象的值。
ToString的默认实现获取抛出当前异常的类名、消息、内部异常调用ToString的结果、调用Environment.StackTrace的结果。如果这些成员中的任何一个是空引用(在 Visual Basic 中为 Nothing),则其值不包含在返回的字符串中。
如果没有错误消息或者是空字符串 (“”),则不返回错误消息。仅当内部异常的名称和堆栈跟踪不是空引用(在 Visual Basic 中为 Nothing)时才返回它们。