c# - 实例化后如何找到 log4net 实例?

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

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

log4net.Config.XmlConfigurator.Configure();

然后在我的应用程序的任何 Controller 中我都可以调用这个方法:

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

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

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

最佳答案

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

这是 the singleton pattern 的变体.

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

关于c# - 实例化后如何找到 log4net 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341878/

相关文章:

C# CGI 可执行文件——好主意还是坏主意?

c# - 有什么方法可以在UWP应用程序和WPF应用程序之间共享代码?

c# - 如何仅为可见元素引发 OnPropertyChanged?

c# - 如何制作 Response.Write(...);在我的 Controller 中

ajax - 替换 Mvc 部分 View 后的 select2 jquery 不再起作用

c# - 使用 SDK 开发 MS Project 2010

c# - 如何从 .net Core 2.2 中的 appsettings.json 读取日志配置

c# - 表单在获取所有数据之前打开。如何让 UI 线程等待处理线程的第一个周期完成?

.net - 如何使用响应式框架将两个异步操作链接在一起?

asp.net - iisexpress 在启动 MVC 项目时挂起