2

我开发了一个库,该库被另一个应用程序中的加载项体系结构使用。我的图书馆使用 log4net 进行日志记录。

这在测试中可以正常工作,因为可以解析 app.config 的位置,并且使用以下命令配置 log4net:

log4net.Config.XmlConfigurator.Configure();

当作为加载项加载时,无法使用此方法解析应用程序配置。

一种选择是使用通过加载项体系结构传入的配置来配置 log4net。可以使用的配置类似于下面的结果:

string asmFile = System.Reflection.Assembly.GetExecutingAssembly().Location;
System.Configuration.Configuration dllConfig = System.Configuration.ConfigurationManager.OpenExeConfiguration(asmFile);

System.Configuration.Configuration如何与log4net.Config.XmlConfigurator一起使用?

我可以从配置中看到适用的 ConfigurationSection,但看不到轻松获取XmlConfigurator.Configure()所需的 ILoggerRepository 或 XmlElement 的方法。

System.Configuration.ConfigurationSection configSection = configuration.GetSection("log4net");
4

2 回答 2

2

这是迄今为止我想出的最好的,它似乎并不特别强大。

if (configuration.HasFile)
{
        System.IO.FileInfo configFileInfo = new System.IO.FileInfo(configuration.FilePath);
        log4net.Config.XmlConfigurator.Configure(configFileInfo);
}

我确实考虑过使用 XmlSerializer 将配置写入 XmlDocument,然后将该 XmlElement 传递给 Configure,但我无法让配置序列化。

于 2011-03-03T23:05:10.463 回答
0

我无法控制他们如何使用它(除了我发布的 API),但需要为他们提供一种配置方法。

我们的 log4net 包装器在一个 dll 中。使用此日志框架的项目只需在其 web 服务/客户端的配置文件中添加 log4net 配置块。

除此之外,程序必须在启动时调用它:

    XmlConfigurator.Configure();
于 2011-03-04T08:44:59.933 回答