我有一个WCF独立服务,在我的app.config文件中使用log4net及其所有配置,我在第一次运行服务时加密配置文件。我目前将此设置作为控制台应用程序运行但是当我启动它时,在保存加密配置文件后,服务打印出来
log4net:错误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仍然可以使用加密配置(编辑:在调试中;当作为服务在发布中运行时(但是权限已打开),它无法记录任何内容)
那么,任何人都可以告诉我这个错误是什么以及如何修复我的代码以阻止它被抛出。
答案 0 :(得分:1)
回答我自己:
诀窍是不要使用AssemblyInfo.cs中的条目来加载log4net,而是将此代码放在main方法中
XmlConfigurator.Configure();
这在.NET完成其工作并解冻配置文件后加载log4net配置。使用更常用的方法将此行放在assemblyinfo中显然会使log4net尝试加载并读取其配置。