避免记录相同的异常

时间:2017-05-08 11:15:50

标签: c# exception-handling enterprise-library-6

我正在使用Microsoft.Practices.EnterpriseLibrary.ExceptionHandling来处理应用程序中的异常。

我有一个处理程序,可以在我们的自定义日志记录类中记录异常。此处理程序是异常策略定义的一部分,将NotifyRethrow作为PostHandlingAction。

这是记录异常的处理程序

[ConfigurationElementType(typeof(CustomHandlerData))]
public class ExceptionLoggingHandler : IExceptionHandler
{
    public Exception HandleException(Exception exception, Guid handlingInstanceId)
    {
        Log.Write(exception);
        return exception;
    }
}

这是我的例外政策定义

var throwAndLogPolicy = new ExceptionPolicyDefinition(PolicyType.LogAndThrow, new List<ExceptionPolicyEntry>()
{
    new ExceptionPolicyEntry(
        typeof(Exception),
        PostHandlingAction.NotifyRethrow,
        new IExceptionHandler[]
        {
            new ExceptionLoggingHandler()
        })                
});

我想避免使用此处理程序两次记录相同的excpetion。这是否可以使用ExceptionHandling应用程序块。

假设我们有一个调用MethodB的MethodA,而MethodB又会抛出一个excpetion。

public void MethodA()
{
    try
    {
        MethodB();
    }
    catch(Exception ex)
    {
        if(ExceptionPolicy.HandleException(ex, "LogAndRethrow"))
            throw;
    }
}

public void MethodB()
{
    try
    {
        CallCodeThatThrowsAnException();
    }
    catch(Exception ex)
    {
        if(ExceptionPolicy.HandleException(ex, "LogAndRethrow"))
            throw;
    }
}

这个例子是合法的。可以从其他上下文而不是MethodA调用MethodB。恰好在这种情况下,它从MethodA调用,并且该方法本身具有异常处理块。如您所见,这会将我的异常记录两次。

我提出的唯一解决方案是在ExceptionLoggingHandler中包含一组抛出的异常,以跟踪记录的异常。这样我只会记录一次异常。这个解决方案的问题是我不知道何时删除该删除。

0 个答案:

没有答案