2013-12-16 43 views
1

這是我需要加載一個不同的app.config文件,其中包含我的log4net設置。在我的項目中,我創建了一個從IConfigurationReader繼承的類。對於Methode getSection,我加載我的配置文件並返回該部分。Log4Net IConfigurationReader不能正常工作

我可以看到它正在加載配置文件和部分,但它並沒有將它轉換爲我在配置文件中定義的類型。

<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,但我不知道爲什麼它不會產生我廠適配器。我已經在配置中嘗試了完全限定的名字,但沒有運氣。

感謝您的幫助

回答

1

只要你設置你的日誌管理的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; 
    } 
}