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

时间:2013-03-11 15:04:06

标签: c# .net asp.net-mvc asp.net-mvc-4 log4net

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

log4net.Config.XmlConfigurator.Configure();

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

这是the singleton pattern的变体。

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