Сообщения Log4Net «Не удалось найти информацию о схеме»

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

Не удалось найти информацию схемы для элемента «log4net» …

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

   

Решено:

  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 в этом файле, но я все равно получаю те же сообщения.

У меня был другой подход, и мне нужен следующий синтаксис:

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

который отличается от последнего сообщения xsl, но сделал меня для меня. Проверьте это сообщение в блоге , это помогло мне.

Вы можете привязать в схеме элемент log4net . Есть несколько плавающих вокруг, большинство из них не полностью обеспечивают различные доступные варианты. Я создал следующий xsd, чтобы обеспечить как можно большую проверку: http://csharptest.net/downloads/schema/log4net.xsd

Вы можете легко связать его с xml, изменив элемент log4net :

  

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

Я считаю, что вы видите сообщение, потому что Visual Studio не знает, как проверить раздел log4net файла конфигурации. Вы можете исправить это, скопировав log4net XSD в C: \ Program Files \ Microsoft Visual Studio 8 \ XML \ Schemas (или там, где установлена ​​ваша Visual Studio). В качестве дополнительного бонуса вы должны теперь получить поддержку intellisense для log4net

На самом деле вам не нужно придерживаться расширения .xml. Вы можете указать любое другое расширение в атрибуте ConfigFileExtension:

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

@steve_mtl: Изменение расширений файлов из .config в .xml решило проблему. Спасибо.

@Wheelie: Я не мог попробовать ваше предложение, потому что мне нужно решение, которое работает с немодифицированной установкой Visual Studio.


Подводя итог, вот как решить проблему:

  1. Скопируйте каждый тег log4net в отдельный xml файл. Обязательно используйте .xml качестве расширения файла.
  2. Добавьте в AssemblyInfo.cs следующую строку:

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

Для VS2008 просто добавьте файл log4net.xsd в свой проект; VS смотрит в папку проекта, а также каталог установки, о котором упоминал Wheelie.

Кроме того, использование расширения .config вместо .xml предотвращает проблему безопасности, поскольку IIS по умолчанию не поддерживает файлы * .config.

В ответе Роджера , где он представил схему, это работало очень хорошо для меня, кроме случаев, когда комментатор упоминал

Этот XSD жалуется на использование пользовательских приложений. Он разрешает только приложению из набора по умолчанию (определенного как перечисление) вместо простого создания этого поля строки

Я изменил исходную схему с xs:simpletype именем log4netAppenderTypes и удалил enums. Вместо этого я ограничил его базовым шаблоном ввода .NET (я говорю basic, потому что он просто поддерживает только имя типа или имя-типа, сборку, однако кто-то может его расширить.

Просто замените определение log4netAppenderTypes следующим в XSD:

      

Я передаю это оригинальному автору, если он хочет включить его в свою официальную версию. До тех пор вам придется загружать и изменять xsd и ссылаться на него соответствующим образом, например:

    

Вы пытались использовать отдельный файл log4net.config?

Я получил тестовый проект asp для сборки, поместив xsd-файл в папку visual studio schemas, как описано выше (для меня это C: \ Program Files \ Microsoft Visual Studio 8 \ XML \ Schemas), а затем, делая мой просмотр web.config как это:

     
В

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

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

   

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

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

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

  
Давайте будем гением компьютера.