我有一个应用程序由主机和可插拔模块(插件)组成。
我希望能够为主机和每个插件配置log4net。 它们每个都应该有自己的配置文件,且每个都将记录到不同的文件中。
只有主机有一个App.config文件。插件有自己的配置文件,其中包含log4net配置部分。
从其中一个插件调用XmlConfigurator.Configure会覆盖主机的app.config log4net定义。
是否有一种简单的方法来附加配置而不是覆盖它们?
谢谢, Gai。
我有一个应用程序由主机和可插拔模块(插件)组成。
我希望能够为主机和每个插件配置log4net。 它们每个都应该有自己的配置文件,且每个都将记录到不同的文件中。
只有主机有一个App.config文件。插件有自己的配置文件,其中包含log4net配置部分。
从其中一个插件调用XmlConfigurator.Configure会覆盖主机的app.config log4net定义。
是否有一种简单的方法来附加配置而不是覆盖它们?
谢谢, Gai。
看起来您已经找到了适合您的解决方案。然而,我发现另外一种解决方案,我认为它更加“理想”,因此我会将它发布在这里,以供将来可能遇到这个问题的人参考。
log4net有一个称为repositories的概念,可以单独配置。这不是很流行,也没有很好的文档,但这里是我找到的一些文档:
http://logging.apache.org/log4net/release/manual/repositories.html
无论如何,您只需要在您的插件程序集或程序集上添加RepositoryAttribute
,并为该插件指定唯一的存储库名称,log4net将保持其与其他所有内容分开。
XDocument
中以有效地组合成一个单一的文件,然后调用XmlConfigurator.Configure()。log4net
根节点的所有子节点加载到单独的XElement
实例中,并将它们合并到一个新的XDocument
中,该文档具有一个根log4net
节点。*.dll.log4net.config
),将它们嵌入到程序集中,或者以其他方式将它们与模块打包。
Bruno Marotta 在此处提供了这种代码的实现:
www.kopf.com.br/kaplof/using-multiple-configuration-files-with-log4net
XmlConfigurator
类的ConfigureAndWatch
方法。基本上,您需要使用特定的配置文件设置您的主机程序集日志记录器配置。当您的插件加载时,让它们将其配置元素写入同一配置文件中的log4net配置部分。由于log4net已被告知使用ConfigureAndWatch
监视该文件的更改,因此当该文件添加了新数据时,log4net将重新加载配置,其中现在包括来自插件的配置元素。