C# 实例化后如何找到log4net实例?

C# 实例化后如何找到log4net实例?,c#,.net,asp.net-mvc,asp.net-mvc-4,log4net,C#,.net,Asp.net Mvc,Asp.net Mvc 4,Log4net,我在mvc4应用程序中使用log4net(出于学术目的)。我在global.asax的Application\u Start()方法中调用此方法 log4net.Config.XmlConfigurator.Configure(); 然后,在我的应用程序的任何控制器中,我都可以调用此方法: ILog _logger = LogManager.GetLogger(typeof(T)); 问题是,当我在Application\u Start()方法中调用Configure()方法,但我没有在任

我在mvc4应用程序中使用log4net(出于学术目的)。我在global.asax的
Application\u Start()
方法中调用此方法

log4net.Config.XmlConfigurator.Configure();
然后,在我的应用程序的任何控制器中,我都可以调用此方法:

 ILog _logger = LogManager.GetLogger(typeof(T));
问题是,当我在
Application\u Start()
方法中调用
Configure()
方法,但我没有在任何变量中存储对它的引用时,
GetLogger()
方法如何知道在哪里查找,更准确地说,它在哪里找到log4net实例


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

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

这是一个变体


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

单例模式稍微清除了它。因此GetLogger方法只返回静态Log4Net对象。这意味着您可以访问任何静态对象,只要它已经创建(使用静态构造函数)。即使它尚未创建,也会在您第一次访问它时创建,对吗?对。记录器是在首次访问时创建的。