在对已部署的 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/