我在mvc4应用程序中使用log4net(用于学术目的)。我在Application_Start()
方法的 global.asax 中调用此方法。
log4net.Config.XmlConfigurator.Configure();
然后在我的应用程序的任何控制器中,我可以调用此方法:
ILog _logger = LogManager.GetLogger(typeof(T));
问题是,当我在Configure()
方法中调用Application_Start()
方法时,但我没有在任何变量中存储对它的引用,GetLogger()
方法如何知道在哪里查看,更准确地说它在哪里找到log4net实例?
就我个人而言,我无法想象它的路径(除非我知道它的内存位置,否则它可能会被加载)。
答案 0 :(得分:3)
Log4net在静态变量中存储对它的引用。 GetLogger
方法可以访问该变量并返回适当的值。 (实际上,我稍微过分了一下。有关详细信息,请参阅log4net源代码。)
这是the singleton pattern的变体。
顺便说一句,你可以让log4net创建多个记录器实例(正如我所说,它是单例的变体)。为此,请通过logger element配置其他记录器,然后将您通过元素的name
属性指定的名称传递给LogManager.GetLogger()
。 GetLogger
方法将使用传递给它的名称作为相应静态记录器实例的查找键,并在第一次请求时创建该实例。