我正在使用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
来做?因为基本上拦截器围绕该方法工作,我需要它在内部方法中工作。
答案 0 :(得分:0)
在您捕获的异常中,您永远不会进入拦截器的catch
块。
因此,在捕获异常的方法中,您可以在另外的截获方法中处理捕获的异常,该方法将被适当地记录。这会让你的代码库膨胀一些,但最终会得到你想要的信息,而不会牺牲你的架构。
public void InterceptedMethod()
{
try
{
//Some code that fails.
}
catch
{
HandleException();
}
}
//Intercept this method also
public void HandleException()
{
}