繁体   English   中英

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

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

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

您可以使用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多次调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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