我一直在使用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(&#34;输入方法Foo&#34;);
我不确定延长Castle Windsor测井资料的最佳方法来实现这一目标。有什么想法吗?
修改
我现在已经创建了自己的自定义记录器工厂(继承自Log4netFactory)和自定义记录器(继承自Log4netLogger,并包含我的Trace ...方法),然后将其注册到Windsor,如下所示: -
container.AddFacility<LoggingFacility>(f => f.LogUsing<CustomLoggerFactory>());
不幸的是,我仍然需要在我的课程中公开ILogger类型的公共属性,否则Windsor不会注入记录器。我可以将它转换为我的自定义记录器,但它不是很优雅:
(Logger as CustomLog4NetLogger).TraceEnter();