2012-12-03 204 views
0

我有一個WCF獨立服務,它在我的app.config文件中使用log4net及其所有配置,並且在第一次運行服務時加密配置文件。我現在有這個設置爲一個控制檯應用程序運行,但是當我啓動,加密的配置文件保存後直,服務打印出加密配置文件時出現log4net錯誤

log4net的:ERROR XmlHierarchyConfigurator:找不到物業 [的EncryptedData]到上 [log4net.Repository.Hierarchy.Hierarchy]

其迷惑我,因爲在新加密配置文件的log4net的部分一個EncryptedData部分中設置的對象。

我使用加密的配置文件部分:

section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); 

我log4net的配置文件部分看起來像(前)這樣的:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" restartOnExternalChanges="false" /> 
    </configSections> 

    <log4net> 
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" > 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <appender-ref ref="ConsoleAppender" /> 
    </root> 
    </log4net> 

後:

<log4net configProtectionProvider="DataProtectionConfigurationProvider"> 
    <EncryptedData> 
     <CipherData> 
     <CipherValue>AQAAANCMnd8BFdERjHoAw <etc> </CipherValue> 
     </CipherData> 
    </EncryptedData> 
    </log4net> 

Log4net仍然可以與加密配置一起工作(編輯:在調試中;當在發佈中作爲服務運行時(但是,因爲它沒有記錄任何東西)

所以,誰能告訴我這個錯誤是什麼,以及如何修復我的代碼,以阻止它被拋出。

回答

1

回答我的:

的訣竅是不使用的AssemblyInfo.cs項加載log4net的,而不是把這個代碼的主要方法

XmlConfigurator.Configure(); 

此加載後log4net的配置。 NET已經完成了它的工作並解密了配置文件。使用更常用的將這行放在assemblyinfo中的方式顯然會使log4net在發生這種情況之前嘗試加載並讀取它的配置。

相關問題