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