log4net“스키마 정보를 찾을 수 없습니다”메시지
-
05-07-2019 - |
문제
나는 사용하기로 결정했다 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)]
니모 추가 :
이 스레드에서 답의 조언을 따르는 사람에게 경고의 한마디 만 있습니다. Web Service의 루트에있는 XML에 Log4Net 구성을 기본적으로 누구에게나 액세스 할 수 있으므로 보안 위험이 있습니다. 구성에 민감한 데이터가 포함되어 있는지 확인하십시오. 다른 위치에 다른 위치에 넣을 수 있습니다.
@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
xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
이 스레드에서 답의 조언을 따르는 사람에게 경고의 한마디 만 있습니다. Web Service의 루트에있는 XML에 Log4Net 구성을 기본적으로 누구에게나 액세스 할 수 있으므로 보안 위험이 있습니다. 구성에 민감한 데이터가 포함되어 있는지 확인하십시오. 다른 위치에 다른 위치에 넣을 수 있습니다.
Visual Studio가 구성 파일의 log4net 섹션을 검증하는 방법을 모르기 때문에 메시지를보고 있다고 생각합니다. log4net XSD를 C : Program Files Microsoft Visual Studio 8 XML Schemas (또는 Visual Studio가 설치된 곳)에 복사하여이를 해결할 수 있어야합니다. 추가 보너스로 이제 log4net에 대한 Intellisense 지원을 받아야합니다.
실제로 .xml 확장자를 고수 할 필요는 없습니다. configfileextension 속성에서 다른 확장자를 지정할 수 있습니다.
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension=".config", Watch = true)]
@steve_mtl : 파일 확장자 변경 .config
에게 .xml
문제를 해결했습니다. 고맙습니다.
@wheelie : 수정되지 않은 비주얼 스튜디오 설치와 함께 작동하는 솔루션이 필요했기 때문에 제안을 시도 할 수 없었습니다.
요약하면 문제를 해결하는 방법은 다음과 같습니다.
- 모든 log4net 특정 태그를 별도로 복사하십시오
xml
-파일. 사용하십시오.xml
파일 확장자로. 다음 줄을 추가하십시오
AssemblyInfo.cs
:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlFile.xml", Watch = true)]
vs2008의 경우 log4net.xsd 파일을 프로젝트에 추가하십시오. vs는 프로젝트 폴더와 Wheelie가 언급 한 설치 디렉토리를 살펴 봅니다.
또한 .xml 대신 .config Extension을 사용하면 IIS가 기본적으로 *.config 파일을 제공하지 않기 때문에 보안 문제를 피할 수 있습니다.
~ 안에 로저의 대답, 그가 스키마를 제공 한 곳에서, 이것은 댓글 작성자가 언급 한 곳을 제외하고 나에게 매우 효과적이었습니다.
이 XSD는 사용자 정의 부속사의 사용에 대해 불평하고 있습니다. 단순히 문자열 필드를 만드는 대신 기본 세트 (열거로 정의)에서 appender 만 허용합니다.
나는 원래 스키마를 수정했다 xs:simpletype
명명 된 log4netAppenderTypes
열거를 제거했습니다. 대신 기본 .NET 타이핑 패턴으로 제한했습니다 (단지 지원하기 때문에 기본이라고합니다. 타이프 이름 OR 타이프 이름, 어셈블리 - 그러나 누군가가 그것을 확장 할 수 있습니다.
간단히 교체하십시오 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.config 파일을 사용해 보셨습니까?
위에서 설명한대로 XSD 파일을 Visual Studio Schemas 폴더에 넣음으로써 빌드 할 테스트 ASP 프로젝트를 받았습니다 (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 설치를 수정하지 않고 적절한 버전 작성 등을 고려하십시오. 팀의 나머지 부분 중에서 .xsd 파일을 솔루션 ( '솔루션 항목')에 추가하거나 특정 프로젝트에 대해서만 원한다면 여기에 포함시킵니다.
조금 늦었지만 Log4net이 제공하는 예를 살펴보면 모든 구성 데이터를 App.Config에 넣는 것을 볼 수 있습니다. 하나의 차이점, 구성 등록이 있습니다.
<!-- Register a section handler for the log4net section -->
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
정의 "System.configuration.ignoresectionHandler"유형으로 정의 할 수 있습니까? Visual Studio가 Log4Net에 대한 경고/오류 메시지가 표시되지 않는 이유는 무엇입니까?
나는 따라 갔다 전부대답 https://stackoverflow.com/a/11780781/6139051 그리고 "log4net.appender.traceappender, log4net"과 같은 AppenderType 값에는 효과가 없었습니다. log4net.dll 어셈블리에는 "log4net"의 어셈블리 테이틀이 있습니다. 즉, 어셈블리 이름에는 내부에 점이 없기 때문에 키트의 답변의 Regex가 작동하지 않았습니다. Regexp에서 세 번째 괄호 그룹 이후에 물음표를 추가해야하며 그 후에는 완벽하게 작동했습니다.
수정 된 Regex는 다음과 같습니다.
<xs:pattern value="[A-Za-z_]\w*(\.[A-Za-z_]\w*)+(\s*,\s*[A-Za-z_]\w*(\.[A-Za-z_]\w*)?+)?"/>