3

我在 mvc4 应用程序中使用 log4net(用于学术目的)。我在方法的global.asax中调用了这个Application_Start()方法。

log4net.Config.XmlConfigurator.Configure();

然后在我的应用程序的任何控制器中,我都可以调用此方法:

 ILog _logger = LogManager.GetLogger(typeof(T));

问题是当我在Configure()方法中调用方法时Application_Start(),但我没有在任何变量中存储对它的引用,该GetLogger()方法如何知道在哪里查找,更准确地说,它在哪里找到 log4net 实例?

就个人而言,我无法想象通往它的路径(除非我知道它被加载的内存位置)。

4

1 回答 1

3

Log4net 将对它的引用存储在静态变量中。该GetLogger方法可以访问该变量并返回适当的值。(实际上,我有点过于简化了。有关完整详细信息,请参阅 log4net 源代码。)

这是单例模式的变体。

顺便说一句,您可以让 log4net 创建多个记录器实例(正如我所说,它是单例的一种变体)。为此,请通过logger 元素配置其他记录器,然后将您通过该元素的name属性分配的名称传递给LogManager.GetLogger(). 该GetLogger方法将使用传递给它的名称作为适当静态记录器实例的查找键,并在您第一次请求时创建该实例。

于 2013-03-11T15:12:05.543 回答