C# - 创建新的异常而不会丢失堆栈跟踪和内部异常?

时间:2015-11-04 02:32:01

标签: c# exception

我有一个提供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个单独的日志消息,但它并不理想。

1 个答案:

答案 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