简体   繁体   中英

C# - Create new exception without losing stack trace and inner exceptions?

I have a method that provides an Exception object and I want to log an error if anything happens in the error handler itself. Here is some pseudocode:

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

Basically, I am trying to combine originalException and e above into one Exception message to pass to a logger object. I suppose one option would be to create 2 separate log messages but it's not ideal.

You could use an AggregateException to wrap multiple exceptions:

public override void OnError(Exception originalException)
{
    try
    {
        // Do work...
    }
    catch (Exception e)
    {
        var exs = new AggregateException(originalException, e);
        Logger.Error("An error occurred", exs);
    }
}

EDIT: If Logger doesn't record contents of the InnerException property (or InnerExceptions in this case) then seems the only option is multiple calls to Logger.Error .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM