C#引发带有堆栈跟踪的自定义异常

时间:2019-07-19 16:16:55

标签: c# exception

在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;
}

1 个答案:

答案 0 :(得分:0)

问题是:在构造函数内部正在检索堆栈跟踪。它将永远在那里null。在引发异常时(而不是在引发异常时)填充堆栈跟踪。

最好在调用者层次结构中的某个地方进行记录,而不是在异常本身中进行记录。因为例外是数据,例如如果将进行跨域调用,则将对异常进行序列化/反序列化,因此将第二次调用构造函数(在您的示例中,单个异常将有2条日志记录)