Ошибка Log4net с XmlHierarchyConfigurator. Отсутствует свойство фильтра - PullRequest
0 голосов
/ 04 июня 2019

Один из наших WebApis недавно прекратил вывод логов.В файле трассировки мы получили следующее сообщение:

log4net: ОШИБКА XmlHierarchyConfigurator: не удалось найти свойство [фильтр] для установки объекта в [log4net.Repository.Hierarchy.Hierarchy]

Файл конфигурации выглядиткак показано ниже, и я предполагаю, что фильтр в ошибке является тем же фильтром в конфигурации, поэтому я не уверен, почему он не может его найти.Я обновил до последней версии log4net, и это решило проблему в течение нескольких дней, и затем мы снова получили ошибку «Не удается найти свойство [фильтр]».Файл конфигурации не изменился за этот период.

<configuration>
  <configSections>
    <section name="log4net"
        type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingFileAppender"/>
    </root>
    <filter type="log4net.Filter.LevelMatchFilter">
      <acceptOnMatch value="true" /> <!--change to false to exclude info logs -->
      <levelToMatch  value="INFO" />
    </filter>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs/Log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="1001KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level: %message%newline" />
      </layout>
    </appender>
  </log4net>

</configuration>

Странно, что он работал некоторое время, останавливался, обновлялся, работал некоторое время, останавливался.Я в растерянности относительно того, что могло бы измениться, чтобы оно перестало работать в любое время.

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 04 июня 2019

Ваша конфигурация недействительна.
Фильтр может быть определен только в приложении.

Документация упоминает:

Элементы фильтров могут быть определены только как дочерние элементы элементы.

Переместите определение фильтра в приложение, как показано ниже.

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <filter type="log4net.Filter.LevelMatchFilter">
        <acceptOnMatch value="true" /> <!--change to false to exclude info logs -->
        <levelToMatch  value="INFO" />
    </filter>
    <file value="Logs/Log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="1001KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level: %message%newline" />
      </layout>
</appender>

(Я не могу объяснить, почему ошибка возникает только в определенное / случайное время; возможно, она (повторно) происходит во время конфигурации, например, после перезагрузки веб-сайта / домена приложения) ...
В конце концов, Log4net пытается продолжать как можно больше.

...