【问题标题】:log4net error when encrypting config file加密配置文件时出现 log4net 错误
【发布时间】:2012-11-21 05:50:02
【问题描述】:

我有一个 WCF 独立服务,它在我的 app.config 文件中使用 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 仍然可以使用加密配置(编辑:那是在调试中;在作为服务发布时(但权限打开)它无法记录任何内容)

那么,谁能告诉我这个错误是什么以及如何修复我的代码以阻止它被抛出。

【问题讨论】:

    标签: encryption log4net config


    【解决方案1】:

    回答我自己的:

    诀窍是不要使用 AssemblyInfo.cs 中的条目来加载 log4net,而是将此代码放在 main 方法中

    XmlConfigurator.Configure();
    

    这会在 .NET 完成它的工作并解密配置文件后加载 log4net 配置。使用更常用的方式将这一行放入 assemblyinfo 显然会使 log4net 在发生这种情况之前尝试加载和读取其配置。

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      相关资源
      最近更新 更多