我有一个由主机和可插拔模块(插件)组成的应用程序。
我希望能够为主机和其他每个模块配置log4net。 它们中的每一个都应该有自己的配置文件,每个文件都会记录到不同的文件中。
只有主机有App.config文件。插件有自己的配置文件,包含log4net配置部分。
从其中一个插件调用XmlConfigurator.Configure会覆盖主机的app.config log4net定义。
是否有一种简单的方法来添加配置而不是覆盖它们?
谢谢, 盖
答案 0 :(得分:16)
您似乎已经找到了适合您的解决方案。但是,我发现了一个不同的解决方案,我认为它更“理想”,所以我会在这里发布,以便将来可能会发现这个问题。
log4net有一个名为repositories的概念,可以单独配置。它不是很受欢迎,也没有很好的文档记录,但这里有一些我发现的文档:
http://logging.apache.org/log4net/release/manual/repositories.html
无论如何,您需要做的就是在插件程序集或程序集上添加RepositoryAttribute
,并为该插件添加唯一的存储库名称,log4net将使其与其他所有内容分开。
答案 1 :(得分:4)
答案 2 :(得分:2)
我自己也遇到了这个问题。虽然这不是我所谓的“理想”,但我认为目前最好的解决方案是使用ConfigureAndWatch
类的XmlConfigurator
方法。基本上,您使用特定配置文件让主机程序集设置log4net配置。插件加载后,让他们将配置元素写入同一配置文件的log4net配置部分。由于log4net已被告知要使用ConfigureAndWatch
来查看该文件的更改,因此当文件添加了新数据时,log4net将重新加载配置,该配置现在将包含插件中的配置元素。
这有点hackish,但它似乎工作。当然,下一步是将其移入我的日志记录框架,以便联合访问配置文件。
请注意,正在编写/保存插件的配置与重新加载并应用于记录器存储库的更新配置之间存在短暂延迟。