我为一个可能出错的特定问题创建了一个自定义异常.我从另一个系统接收数据,如果在尝试解析数据时发生爆炸,我会引发异常.在我的自定义异常中,我添加了一个名为"ResponseData"的字段,因此我可以准确地跟踪我的代码无法处理的内容.
在诸如此类的自定义异常中,额外的响应数据是否应该进入异常"消息"?如果它去那里,消息可能是巨大的.我有点想要它,因为我正在使用Elmah,这就是我如何获得这些数据.
所以问题是: - 如何让Elmah在自定义异常中记录字段中的额外信息,或者 - 额外的异常详细信息是否应该进入"message"属性?
在诸如此类的自定义异常中,额外的响应数据是否应该进入异常"消息"?
不,正如索伦已经指出的那样.但是,您的异常类型可以覆盖ToString
并在那里明智地添加响应数据信息.这是一个非常正常的做法,其次是BCL(基类库)中的许多异常类型,因此您不会发现自己正在逆流而行.例如,看一下SSCLI(Rotor)中的System.IO.FileNotFoundException.ToString实现:
public override String ToString() { String s = GetType().FullName + ": " + Message; if (_fileName != null && _fileName.Length != 0) s += Environment.NewLine + String.Format(Environment.GetResourceString("IO.FileName_Name"), _fileName); if (InnerException != null) s = s + " ---> " + InnerException.ToString(); if (StackTrace != null) s += Environment.NewLine + StackTrace; try { if(FusionLog!=null) { if (s==null) s=" "; s+=Environment.NewLine; s+=Environment.NewLine; s+="Fusion log follows: "; s+=Environment.NewLine; s+=FusionLog; } } catch(SecurityException) { } return s; }
如您所见,它附加了FusionLog属性的内容,它代表了装配加载失败时的额外信息.
如何让Elmah在自定义异常中记录字段中的额外信息
ELMAH将调用ToString
异常的结果存储为错误的详细信息,因此如果您ToString
按规定实施,则无需进一步工作即可记录信息.唯一的问题是记录的详细信息将是非结构化文本.
您不应该填写.Message
调试信息,而应该使用简洁,有用的文本.
http://msdn.microsoft.com/en-us/library/system.exception.message.aspx
Message的文本应该完整地描述错误,并且应该在可能的情况下解释如何纠正错误.Message属性的值包含在ToString返回的信息中.
Message属性仅在创建Exception时设置.如果没有为当前实例的构造函数提供消息,系统将提供使用当前系统区域性格式化的默认消息.
[..]
对继承者的说明:
在需要控制消息内容或格式的类中重写Message属性.应用程序代码通常在需要显示有关已捕获的异常的信息时访问此属性.
应该本地化错误消息.
响应数据不符合描述.
不熟悉elmah,我不能告诉你如何Exception
在使用它时扩展课程.elmah是否实现了自己的子类Exception
?还是一个界面?你能自己继承它吗?
Exception类包含一个字典(我相信,名为Data),您可以使用该字典将自定义数据与vanilla异常相关联.