我有以下代码:
finally
{
if (!isDnsSet)
{
var exception = new Exception(<DNS-INFORMATION>);
localLog.TraceException(exception);
throw exception;
}
}
就目前而言,此异常会向用户抛出太多信息,而这些信息对他们来说并不是特别需要。我希望能够使用我的exception
类来记录localLog
,但也会使用更简洁的消息抛出另一个异常。
我正在考虑使用缩短的消息创建另一个异常,并且仍然使用我的类记录原始的,更详细的异常。
有没有更优雅的方式来做这件事,或者我会做一些像:
var shortException = new Exception(<short and sweet message>);
var longException = new Exception(<not so short and sweet but still useful for other devs>);
localLog.TraceException(longException);
throw shortException;
答案 0 :(得分:1)
我认为更简洁的方法是将更长的异常作为内部异常:
finally
{
if (!isDnsSet)
{
var innerException = new Exception(<not so short and sweet but still useful for other devs>);
var exception = new Exception(<short and sweet message>, innerException);
localLog.TraceException(exception);
throw exception;
}
}
通过这种方式,您抛出的异常与记录的异常之间保持一致,从而使诊断变得更容易。
答案 1 :(得分:1)
一种方法是创建一个包含长消息和短消息的自定义异常。在您的图书馆外获得例外的用户可以通过Exception
的{{1}}媒体资源访问该短信,而您的Message
方法可以通过其提供的附加属性访问该长版本您的自定义例外:
TraceException
内部public class DetailedException : Exception {
public string DetailedMessage { get; }
public DetailedException(string longMessage, string shortMessage) : base(shortMessage) {
DetailedMessage = longMessage;
}
}
方法:
TraceException
答案 2 :(得分:0)
异常处理程序无法接收并处理longException,并且作为其函数的一部分,抛出shortException?