문제

나는 사용하기로 결정했다 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 특정 태그를 별도로 복사하십시오 xml-파일. 사용하십시오 .xml 파일 확장자로.
  2. 다음 줄을 추가하십시오 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 : 수정되지 않은 비주얼 스튜디오 설치와 함께 작동하는 솔루션이 필요했기 때문에 제안을 시도 할 수 없었습니다.


요약하면 문제를 해결하는 방법은 다음과 같습니다.

  1. 모든 log4net 특정 태그를 별도로 복사하십시오 xml-파일. 사용하십시오 .xml 파일 확장자로.
  2. 다음 줄을 추가하십시오 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*)?+)?"/>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top