2

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吗?因为基本上拦截器围绕该方法工作,我需要它在方法内部工作。

4

1 回答 1

0

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

因此,在您的方法中,当您捕获异常时,您可以在一个额外的拦截方法中处理捕获的异常,该方法将被适当地记录。这会使你的代码库膨胀一点,但你最终会在不牺牲架构的情况下获得你想要的信息。

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

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

}
于 2012-05-16T14:06:53.280 回答