在C#中,如何引发包含堆栈跟踪的自定义异常?调用堆栈也可以满足我的日志记录要求。
自定义异常的定义如下...
public class UserNameRequiredExcp : Exception
{
public UserNameRequiredExcp() : base() { ExceptionLogging.WriteToLog(this); }
public UserNameRequiredExcp(string message) : base(message) { ExceptionLogging.WriteToLog(this); }
public UserNameRequiredExcp(string message, Exception exception ) : base(message, exception) { ExceptionLogging.WriteToLog(this); }
}
像这样扔...
public void SetUserName(string userName)
{
if (String.IsNullOrEmpty(userName))
{ throw new UserNameRequiredExcp(); }
_userName = userName;
}
当ExceptionLogging方法执行时,堆栈跟踪是否为空?
internal static void WriteToLog(Exception exception)
{
string stackTrace = exception.StackTrace;
}
答案 0 :(得分:0)
问题是:在构造函数内部正在检索堆栈跟踪。它将永远在那里null
。在引发异常时(而不是在引发异常时)填充堆栈跟踪。
最好在调用者层次结构中的某个地方进行记录,而不是在异常本身中进行记录。因为例外是数据,例如如果将进行跨域调用,则将对异常进行序列化/反序列化,因此将第二次调用构造函数(在您的示例中,单个异常将有2条日志记录)