Сообщения Log4Net «Не удалось найти информацию о схеме» - PullRequest
56 голосов
/ 06 октября 2008

Я решил использовать log4net в качестве регистратора для нового проекта веб-сервиса. Все работает нормально, но я получаю много сообщений, как показано ниже, для каждого тега log4net, который я использую в своем web.config:

Не удалось найти информацию о схеме для элемент 'log4net' ...

Ниже приведены соответствующие части моего web.config:

  <configSections>
    <section name="log4net" 
        type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="C:\log.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="100KB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level: %message%newline" />
      </layout>
    </appender>
    <logger name="TIMServerLog">
      <level value="DEBUG" />
      <appender-ref ref="RollingFileAppender" />
    </logger>
  </log4net>

Решено:

  1. Скопируйте каждый отдельный тег log4net в отдельный xml -файл. Обязательно используйте .xml в качестве расширения файла.
  2. Добавьте следующую строку в AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlFile.xml", Watch = true)]

nemo добавлено:

Просто предупреждение кому-либо следуйте советам ответов в эта тема. Есть возможность угроза безопасности при наличии log4net Конфигурация в XML от корня веб-службы, как это будет по умолчанию доступен любому. Просто посоветуйте, если ваша конфигурация содержит конфиденциальные данные, вы можете захотеть положить его где-нибудь еще.


@ wcm: я пытался использовать отдельный файл. Я добавил следующую строку к AssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

и помещаю в этот файл все, что касается log4net, но я все равно получаю те же сообщения.

Ответы [ 13 ]

0 голосов
/ 02 марта 2017

Я следовал за Кит ответом https://stackoverflow.com/a/11780781/6139051, и он не работал для значений AppenderType, таких как "log4net.Appender.TraceAppender, log4net". Сборка log4net.dll имеет AssemblyTitle «log4net», то есть внутри имени сборки нет точки, поэтому регулярное выражение в ответе Kit не сработало. Я должен добавить знак вопроса после третьей группы в скобках в регулярном выражении, и после этого он работал безупречно.

Модифицированное регулярное выражение выглядит следующим образом:

<xs:pattern value="[A-Za-z_]\w*(\.[A-Za-z_]\w*)+(\s*,\s*[A-Za-z_]\w*(\.[A-Za-z_]\w*)?+)?"/>
0 голосов
/ 15 февраля 2015

Я заметил, что это немного поздно, но если вы посмотрите на примеры, которые предоставляет log4net, вы увидите, как они помещают все данные конфигурации в app.config, с одним отличием, регистрацией configsection:

<!-- Register a section handler for the log4net section -->
<configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>

Может ли определение типа «System.Configuration.IgnoreSectionHandler» стать причиной того, что Visual Studio не отображает никаких предупреждений / сообщений об ошибках в материале log4net?

0 голосов
/ 08 марта 2011

Без изменения установки Visual Studio и учета правильного управления версиями / и т.д. среди остальной части вашей команды добавьте файл .xsd в свое решение (как «элемент решения») или, если вы хотите использовать его только для конкретного проекта, просто вставьте его туда.

...