Log4Net "스키마 정보를 찾을 수 없습니다"메시지
새로운 웹 서비스 프로젝트의 로거로 log4net 을 사용하기로 결정했습니다 . 모든 것이 잘 작동하지만 내가 사용하는 모든 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)]
니모 추가 :
누구에게나 경고의 한마디는이 스레드의 답변의 조언을 따르십시오. 기본적으로 누구나 액세스 할 수 있으므로 웹 서비스의 루트에서 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
log4net
요소 를 수정하여 쉽게 xml에 바인딩 할 수 있습니다 .
<log4net
xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
누구에게나 경고의 한마디는이 스레드의 답변의 조언을 따르십시오. 기본적으로 누구나 액세스 할 수 있으므로 웹 서비스의 루트에서 xml에 log4net 구성을 사용하면 보안 위험이 발생할 수 있습니다. 구성에 민감한 데이터가 포함 된 경우 다른 곳에 배치하는 것이 좋습니다.
Visual Studio가 구성 파일의 log4net 섹션의 유효성을 검사하는 방법을 모르기 때문에 메시지가 표시되는 것 같습니다. log4net XSD를 C : \ Program Files \ Microsoft Visual Studio 8 \ XML \ Schemas (또는 Visual Studio가 설치된 위치)에 복사하여이 문제를 해결할 수 있습니다. 추가 보너스로 이제 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가 언급 한 설치 디렉토리를 찾습니다.
또한 .xml 대신 .config 확장자를 사용하면 IIS가 기본적으로 * .config 파일을 제공하지 않으므로 보안 문제를 방지 할 수 있습니다.
에서 로저의 대답은 그가 스키마를 제공, 이것은 주석이 언급 한 경우를 제외하고 나를 위해 매우 잘 작동
이 XSD는 커스텀 어 펜더 사용에 대해 불평하고 있습니다. 단순히 문자열 필드를 만드는 대신 기본 집합 (열거 형으로 정의 됨)의 appender 만 허용합니다.
xs:simpletype
명명 된 원래 스키마를 수정하고 log4netAppenderTypes
열거를 제거했습니다. 대신 기본 .NET 타이핑 패턴으로 제한했습니다 (기본이라고합니다. typename 만 또는 typename, 어셈블리 만 지원 하기 때문입니다.
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 파일을 사용해 보셨습니까?
위에서 설명한대로 Visual Studio 스키마 폴더에 xsd 파일을 넣은 다음 (C : \ Program Files \ Microsoft Visual Studio 8 \ XML \ Schemas) 빌드 할 테스트 ASP 프로젝트를 얻은 다음 다음과 같이 만듭니다 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에 넣는 것을 볼 수 있습니다. 한 가지 차이점은 configsection 등록입니다.
<!-- Register a section handler for the log4net section -->
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler" />
</configSections>
Could the definition it as type "System.Configuration.IgnoreSectionHandler" be the reason Visual Studio does not show any warning/error messages on the log4net stuff?
I followed Kit's answer https://stackoverflow.com/a/11780781/6139051 and it didn't worked for AppenderType values like "log4net.Appender.TraceAppender, log4net". The log4net.dll assembly has the AssemblyTitle of "log4net", i.e. the assembly name does not have a dot inside, that was why the regex in Kit's answer didn't work. I has to add the question mark after the third parenthetical group in the regexp, and after that it worked flawlessly.
The modified regex looks like the following:
<xs:pattern value="[A-Za-z_]\w*(\.[A-Za-z_]\w*)+(\s*,\s*[A-Za-z_]\w*(\.[A-Za-z_]\w*)?+)?"/>
ReferenceURL : https://stackoverflow.com/questions/174430/log4net-could-not-find-schema-information-messages
'IT Share you' 카테고리의 다른 글
리스너가 람다로 대체 될 수 있다는 것은 무엇을 의미합니까? (0) | 2020.12.15 |
---|---|
ASP.Net-Core의 사용자 지정 인증 (0) | 2020.12.15 |
Joda-Time 사용에 대한 단점이 있습니까? (0) | 2020.12.15 |
HTTP POST는 무한 할 수 있습니까? (0) | 2020.12.15 |
파이썬의 numpy에서“zip ()”에 해당하는 것은 무엇입니까? (0) | 2020.12.15 |