使用Exception.Data
时间:2020-03-06 14:50:13 来源:igfitidea点击:
我们如何在工作的Cprojects中使用Exception.Data属性?
我想要的答案是一种模式,而不是针对应用程序的特定模式。
解决方案
当我知道要创建的异常需要序列化时,就使用了它。有一天,使用Reflector,我发现Excepion.Data被卡在序列化流中或者从序列化流中拉出。
因此,基本上,如果我在自定义异常类上具有已经可序列化的类型的属性,则可以在派生类上实现它们,并使用基础数据对象作为其存储机制,而不是创建私有字段来保存数据。如果我的自定义异常对象的属性需要更高级的序列化,则通常使用后备私有字段来实现它们,并在派生类中处理它们的序列化。
底线是Exception.Data,只需将属性粘贴到其中即可免费提供序列化-但请记住,这些项目需要可序列化!
我使用的异常记录器已经过调整,可以写出数据集合中的所有项目。然后,对于遇到的每个无法从异常堆栈进行诊断的异常,我们将添加该函数范围内的所有数据,发送新的构建,然后等待其再次发生。
我猜我们很乐观,因为我们不会在每个函数中都放它,但我们很悲观,因为一旦解决问题,我们就不会将其淘汰。
我用它来捕获异常发生时从封装范围中获取有关异常时状态的信息。诸如引起异常的文件名之类的项目,或者有助于跟踪问题的某些ID的值之类的项目。
在Web应用程序的最顶层,我还倾向于添加许多Request信息,例如RawUrl,Cookie,Referrer等。
有关更多详细信息,这是我关于主题的博客:
而不是等待问题发生的发生,我将代码添加到可能发生与外部事物(例如外部事件)相关的异常的任何地方。文件名或者正在访问的URL,换句话说,任何有助于解决问题的数据。