Log4Net IConfigurationReader无法正常工作

时间:2013-12-16 20:51:11

标签: log4net app-config log4net-configuration

这是我的场景我需要加载一个不同的app.config文件,其中包含我对log4net的设置。在我的项目中,我创建了一个继承自IConfigurationReader的类。对于Methode getSection,我加载配置文件并返回该部分。

我可以看到它正在加载配置文件和部分,但它没有将它转换为我在配置文件中定义的类型。

<common>
<logging>
  <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net4">
    <arg key="configType" value="FILE-WATCH"/>
    <arg key="configFile" value="C:\Users\dwarner\Documents\Visual Studio 2012\Projects\ConsoleApplication2\ConsoleApplication2\Config\log4net.config" />
  </factoryAdapter>
</logging>

我可以看到它加载原始XML但我不知道为什么它不会创建我的Factory Adapter。我在配置中尝试了完全限定的名称,没有运气。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

只要在LogManager上设置ConfigurationReader并将适配器置空,以便重新加载配置设置就可以了。您还需要确保您的IConfigurationReader加载该部分,因为它自己的DocumentElement:

public class CustomAppConfigurationReader : IConfigurationReader
{
    public object GetSection(string sectionName)
    {
        var handler = new ConfigurationSectionHandler();
        var xml = LoadConfigData().GetSection(sectionName).SectionInformation.GetRawXml();
        var doc = new XmlDocument();
        doc.LoadXml(xml);
        return handler.Create(null, null, doc.DocumentElement);

    }

    /// <summary>
    /// Load configuration data from custom configuration file.
    /// </summary>
    public static Configuration LoadConfigData()
    {
        var filePath = "C:\\SomeOtheApp.config";
        var map = new ExeConfigurationFileMap {ExeConfigFilename = filePath};
        var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
        return config;
    }
}
相关问题