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>


решила:




  1. скопируйте каждый конкретный тег log4net в a отдельно xml-файл. Обязательно используйте .xml как расширение файла.

  2. добавить следующую строку AssemblyInfo.cs:


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


Немо добавлено:




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






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



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


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

645   13  

13 ответов:

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

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

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

вы можете привязать в схеме к 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">

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

Я считаю, что вы видите сообщение, потому что Visual Studio не знает, как проверить раздел log4net файла конфигурации. Вы должны быть в состоянии исправить это, скопировав log4net XSD в C:\Program файлы\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.

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

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

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

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

просто заменить 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>

вы пробовали использовать отдельный log4net.конфигурационный файл?

Я получил тестовый проект asp для сборки, поместив файл xsd в папку схем visual studio, как описано выше (для меня это 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>

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

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

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

может ли определение его как типа " система.Конфигурация.IgnoreSectionHandler " является причиной того, что Visual Studio не показывает никаких предупреждений/сообщений об ошибках в материалах log4net?

я следовал комплект ответ https://stackoverflow.com/a/11780781/6139051 и это не сработало для значений AppenderType, таких как "log4net.Приемщика.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*)?+)?"/>

Comments

    Ничего не найдено.