Подтвердить что ты не робот

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

Я решил использовать log4net в качестве регистратора для нового проекта webservice. Все работает нормально, но я получаю много сообщений, подобных приведенным ниже, для каждого тега 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>

Решено:

  • Скопировать каждый тег log4net в отдельный xml файл. Обязательно используйте .xml в качестве расширения файла.
  • Добавьте следующую строку в 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 в этом файле, но я все равно получаю те же сообщения.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

<log4net 
     xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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


Чтобы подвести итог, вот как решить проблему:

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

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

Ответ 7

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

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

Ответ 8

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

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

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

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

<xs:simpleType name="log4netAppenderTypes">
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Za-z_]\w*(\.[A-Za-z_]\w*)+(\s*,\s*[A-Za-z_]\w*(\.[A-Za-z_]\w*)+)?"/>
  </xs:restriction>
</xs:simpleType>

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

<log4net
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="../../../Dependencies/log4net/log4net.xsd">
  <!-- ... -->
</log4net>

Ответ 9

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

Ответ 10

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

<?xml version="1.0"?>
<!-- 
    Note: As an alternative to hand editing this file you can use the 
    web admin tool to configure settings for your application. Use
    the Website->Asp.Net Configuration option in Visual Studio.
    A full list of settings and comments can be found in 
    machine.config.comments usually located in 
    \Windows\Microsoft.Net\Framework\v2.x\Config 
-->
<configuration>
  <configSections>


    <section  name="log4net" 
              type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

  </configSections>
  <appSettings>

  </appSettings>
  <connectionStrings>

  </connectionStrings>
  <system.web>
    <trace enabled="true" pageOutput="true"  />
    <!-- 
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.
        -->
    <compilation debug="true" />
    <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
        -->
    <authentication mode="Windows" />

    <customErrors mode="Off"/>
    <!--
      <customErrors mode="Off"/>

            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.

    <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
      <error statusCode="403" redirect="NoAccess.htm" />
      <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>
        -->





  </system.web>
    <log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <!-- Please make shure the ..\\Logs directory exists! -->
      <param name="File" value="Logs\\Log4Net.log"/>
      <!--<param name="AppendToFile" value="true"/>-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n"/>
      </layout>
    </appender>
    <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
      <to value="" />
      <from value="" />
      <subject value="" />
      <smtpHost value="" />
      <bufferSize value="512" />
      <lossy value="true" />
      <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
      </evaluator>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property] - %message%newline%newline%newline" />
      </layout>
    </appender>

    <logger name="File">
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
    </logger>
    <logger name="EmailLog">
      <level value="ALL" />
      <appender-ref ref="SmtpAppender" />
    </logger>
  </log4net>
</configuration>

Ответ 11

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

Ответ 12

Я немного замедлил это, но если вы посмотрите на примеры, которые вы найдете в журналах 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?

Ответ 13

Я следил за Kit answer fooobar.com/info/101564/..., и он не работал для значений AppenderType, таких как msgstr "log4net.Appender.TraceAppender, log4net". В сборке log4net.dll есть AssemblyTitle из "log4net", то есть имя сборки не имеет точки внутри, поэтому регекс в ответе "Набор" не работает. Я должен добавить знак вопроса после третьей скобковой группы в regexp, и после этого он работал безупречно.

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

<xs:pattern value="[A-Za-z_]\w*(\.[A-Za-z_]\w*)+(\s*,\s*[A-Za-z_]\w*(\.[A-Za-z_]\w*)?+)?"/>