我有一个提供Exception对象的方法,如果错误处理程序本身发生任何事情,我想记录错误。这是一些伪代码:
public override void OnError(Exception originalException)
{
try
{
// Do work...
}
catch (Exception e)
{
// How do I create this exception without losing the stack
// trace of e and preserving any inner exceptions that were
// in e at the same time including the details of
// originalException?
Exception newException = new Exception(e.Message, originalException);
Logger.Error("An error occurred", newException);
}
}
基本上,我试图将originalException和e结合到一个Exception消息中以传递给logger对象。我想一个选项是创建2个单独的日志消息,但它并不理想。
答案 0 :(得分:0)
您可以使用AggregateException来包装多个例外:
public override void OnError(Exception originalException)
{
try
{
// Do work...
}
catch (Exception e)
{
var exs = new AggregateException(originalException, e);
Logger.Error("An error occurred", exs);
}
}
编辑:如果Logger
没有记录InnerException
属性的内容(或者在这种情况下为InnerExceptions
),那么似乎唯一的选择就是多次调用Logger.Error
。