当前位置:  开发笔记 > 编程语言 > 正文

向自定义异常添加额外信息

如何解决《向自定义异常添加额外信息》经验,为你挑选了3个好方法。

我为一个可能出错的特定问题创建了一个自定义异常.我从另一个系统接收数据,如果在尝试解析数据时发生爆炸,我会引发异常.在我的自定义异常中,我添加了一个名为"ResponseData"的字段,因此我可以准确地跟踪我的代码无法处理的内容.

在诸如此类的自定义异常中,额外的响应数据是否应该进入异常"消息"?如果它去那里,消息可能是巨大的.我有点想要它,因为我正在使用Elmah,这就是我如何获得这些数据.

所以问题是: - 如何让Elmah在自定义异常中记录字段中的额外信息,或者 - 额外的异常详细信息是否应该进入"message"属性?



1> Atif Aziz..:

在诸如此类的自定义异常中,额外的响应数据是否应该进入异常"消息"?

不,正如索伦已经指出的那样.但是,您的异常类型可以覆盖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按规定实施,则无需进一步工作即可记录信息.唯一的问题是记录的详细信息将是非结构化文本.



2> Sören Kuklau..:

您不应该填写.Message调试信息,而应该使用简洁,有用的文本.

http://msdn.microsoft.com/en-us/library/system.exception.message.aspx

Message的文本应该完整地描述错误,并且应该在可能的情况下解释如何纠正错误.Message属性的值包含在ToString返回的信息中.

Message属性仅在创建Exception时设置.如果没有为当前实例的构造函数提供消息,系统将提供使用当前系统区域性格式化的默认消息.

[..]

对继承者的说明:

在需要控制消息内容或格式的类中重写Message属性.应用程序代码通常在需要显示有关已捕获的异常的信息时访问此属性.

应该本地化错误消息.

响应数据不符合描述.

不熟悉elmah,我不能告诉你如何Exception在使用它时扩展课程.elmah是否实现了自己的子类Exception?还是一个界面?你能自己继承它吗?



3> Gabriel Isen..:

Exception类包含一个字典(我相信,名为Data),您可以使用该字典将自定义数据与vanilla异常相关联.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有