1

我有以下要求。

为简单起见,假设我的解决方案由两个项目组成。

  1. 包装 Log4Net 功能的类库项目。
  2. 一个 MVC Web 应用程序项目作为调用应用程序到类库记录器方法,而后者又应该调用 log4net 实际方法。

我想在类库 app.config 文件或此项目中的 xml 文件中指定 log4net 配置。

我在这个线程上阅读了类似的问题How do you configure and enable log4net for a stand-alone class library assembly?

但是将以下两行放入我的类库项目的 Assembly.info 文件的解决方案对我不起作用。

[assembly: log4net.Config.Repository("ClassLibrary1")]
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "ClassLibrary1.config", Watch = true)]

由于 Log4Net 无法找到相关配置。

记录我的类库程序集的名称= ClassLibrary1

我从我的 mvc web 应用程序项目中引用这个库。

任何想法为什么解决方案2在线程中如何为独立的类库程序集配置和启用log4net?

不适合我吗?

编辑:

我的程序流程是这样的。

我的 MVC 应用程序启动。

Unity 通过构造函数注入成功注入了我的 log4netwrapper 的单例实例。

然后在一个动作方法中,我通过我的包装器调用记录器。在包装构造函数中,我创建了 XmlConfigurator。

请注意,在调用时我没有提供 fileinfo 对象作为读取配置条目的路径。仅在我的包装程序集中为此目的

[assembly: log4net.Config.Repository("ClassLibrary1")] 
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "ClassLibrary1.config", 
                                          Watch = true)]. 

这里有什么解决方案吗?

4

1 回答 1

1

如果您查看log4net 文档中的程序集属性,它会说:

因此,如果您使用配置属性,您必须调用 log4net 以允许它读取属性。对 LogManager.GetLogger 的简单调用将导致调用程序集上的属性被读取和处理。因此,必须在应用程序启动期间尽早进行日志调用,并且肯定是在加载和调用任何外部程序集之前。

问题是,当您在 MVC 项目启动中执行此操作时,程序集属性位于外部程序集 ClassLibrary1 中。

如果您XmlConfigurator.Configure(...)在链接到的答案中使用 as ,它将起作用。

于 2013-11-10T20:58:00.513 回答