用于保存数据库异常的安全最大varchar大小是多少?

时间:2015-01-21 07:59:26

标签: c# exception

在我们部署的C#应用​​程序上调试问题的几次令人尴尬的尝试后,我发现只需获取 someException.toString(),我就可以从异常中获得最详细的信息。

由于我将此值记录到数据库中,我对异常字符串的大小有点紧张。我当前的 errorDetail 字段设置为最多3000个字符。

这是一个很好的限制还是有可能获得更大的例外?

1 个答案:

答案 0 :(得分:1)

答案是:不,没有真正的安全限制 - 如果时间过长,你必须手动减少长度。

Exception.ToString()有两种简单的方法可以实现很长的时间。

原因A - Exception.Message很长。

抛出异常的人可以在异常中放入一条非常长的消息。这真的很棒 - 这意味着他们会尝试捕捉导致异常的更多细节,以帮助解决问题。

原因B - 堆栈跟踪可能很长。

如果异常在功能上发生20级深度,则堆栈跟踪将具有20个细节级别。

这里有一些简单的代码来演示这个概念:

    private string GetExceptionString(int iter)
    {
        try
        {
            return RecursiveFunction(iter);
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }
    }

    private string RecursiveFunction(int iter)
    {
        if (iter > 1)
            return RecursiveFunction(iter - 1);

        throw new Exception("Actual Exception Occurs Here");
    }

基本上,如果调用GetExceptionString(1000),它将在1000级嵌套函数中引发异常。而且,当然,您将在堆栈跟踪中获得具有1000个细节级别的异常,并且长度大约为十万个字符。