2013-12-16 3 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을로드 것을 볼 수 있지만 나는 내 공장 어댑터를 작성하지 않습니다 왜 아무 생각이 없습니다. 구성에 정규화 된 이름을 사용해 보았습니다. 도움말

만큼 그것이 작동해야하는 구성 설정을 다시로드, 그래서 당신은 당신의 LogManager에 ConfigurationReader 및 널 (null) 어댑터를 설정 한

답변

1

에 대한

감사합니다. 또한 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; 
    } 
} 
관련 문제