c# - 将异常保存到数据库的安全最大 varchar 大小是多少?

标签 c# exception

在对已部署的 C# 应用程序调试问题进行了几次令人尴尬的尝试后,我发现只需获取 someException.toString() 即可从异常中获取最详细的信息。

因为我将这个值记录到数据库中,所以我有点担心异常字符串可能会变得多大。我当前的 errorDetail 字段设置为最多 3000 个字符。

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

最佳答案

答案是:不,没有真正的安全限制 - 如果长度太长,您将不得不手动缩短长度。

有两种简单的方法可以使 Exception.ToString() 变得很长。

原因 A - Exception.Message 很长。

抛出异常的人可以在异常中放入很长的消息。这真的很棒 - 这意味着他们正在 try catch 导致异常的原因的尽可能多的细节,以帮助找出问题。

原因 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 个详细级别的异常,并且大约有十万个字符长。

关于c# - 将异常保存到数据库的安全最大 varchar 大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28062186/

相关文章:

c# - 捕获不同方法抛出的相同异常?

c++ - 引发未处理的异常

java - 在java中重新抛出不同的捕获异常

java - 需要帮助理解 org.bouncycaSTLe.asn1.ASN1InputStream "java.io.IOException: DER length more than 4 bytes: 63"

c# - Gridview Itemtemplate DropDownList 已启用

c# - 处理 ASP.NET MVC 中的错误 bool 数据

c# - 在 EPPlus 中编写 Excel 文件

java - 如果用户输入数字以外的任何内容,如何将用户返回到程序的输入阶段?

c# - 提高 ASP.NET 的性能,使其能够被许多用户访问

c# - 错误 : (using List class) Index was outside the bounds of array