在诸如此类的自定义异常中,是否应该将额外的响应数据放入异常“消息”中?
不,正如Sören 已经指出的那样。但是,您的异常类型可以覆盖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
按规定实施,则无需进一步工作即可记录信息。唯一的问题是记录的详细信息将是非结构化文本。