使用log4net + AutoFac拦截器记录所有处理的异常

时间:2012-05-16 14:01:48

标签: c# c#-4.0 log4net autofac

我正在使用Log4Net来记录我的申请。目前我想记录我的应用程序中输入的每个方法(用于测试目的)。因此我使用AutoFac拦截功能,有点像这样:

builder.Register(c=> new MyClass()).As<IMyInterface>().EnableInterfaceInterceptors().InterceptedBy(typeof(LoggerClass));

builder.Build();

我的LoggerClass看起来像这样:

public class LoggerClass : StandartInterceptor
{
    ILog _log = LogManager.GetLogger(typeof(LoggerClass));

    override void PreProceed(IInvocation invovation)
    {
         _log.Info(string.Format("entering method: {0}",invocation.Method.Name);
    }
}

现在这个实现将打印所有方法调用的消息(拦截器捕获所有方法条目)。

问题

我想使用此拦截机制记录每个处理异常。 例如,而不是编码:

catch (myException ex)
{
     _log.Error(string.Format("catches exception {0}", ex.Message));
}

我的LoggerClass中会有额外的方法来包装catch语句并向其注入日志消息。 有没有办法使用Log4Net来做?因为基本上拦截器围绕该方法工作,我需要它在内部方法中工作。

1 个答案:

答案 0 :(得分:0)

在您捕获的异常中,您永远不会进入拦截器的catch块。

因此,在捕获异常的方法中,您可以在另外的截获方法中处理捕获的异常,该方法将被适当地记录。这会让你的代码库膨胀一些,但最终会得到你想要的信息,而不会牺牲你的架构。

public void InterceptedMethod()
{
  try
  {
    //Some code that fails.
  }
  catch
  {
     HandleException();
  }
}

//Intercept this method also
public void HandleException()
{

}