我一直在使用 log4net 和 Castle Windsor LoggingFacility 将 ILogger 实例注入到需要记录的类中。记录器的注册方式如下:-
container.AddFacility<LoggingFacility>(f => f.UseLog4Net());
在需要记录的类中,我创建了 Windsor 注入的以下属性:
public ILogger Logger { get; set; }
一切正常,但我想以某种方式扩展此日志记录以允许我跟踪方法进入和退出。在 Castle Windsor 之前,我会围绕 log4net 编写一个包装器并添加诸如 TraceEnter() 和 TraceExit() 之类的方法。这些将从 StackTrace 类中获取当前方法名称并执行Log.Debug("Entered method Foo");
我不确定扩展温莎城堡伐木资料以实现这一目标的最佳方式。有任何想法吗?
编辑:
我现在创建了自己的自定义记录器工厂(从 Log4netFactory 继承)和自定义记录器(从 Log4netLogger 继承,并包含我的 Trace... 方法),然后像这样在 Windsor 中注册它:-
container.AddFacility<LoggingFacility>(f => f.LogUsing<CustomLoggerFactory>());
不幸的是,我仍然必须在我的类中公开 ILogger 类型的公共属性,否则 Windsor 不会注入记录器。我可以将它转换为我的自定义记录器,但它不是很优雅:
(Logger as CustomLog4NetLogger).TraceEnter();