Frage

Ich entschied mich für log4net als Logger für ein neues Webservice-Projekt. Alles funktioniert gut, aber ich bekomme eine Menge von Nachrichten wie unten, für jeden Tag log4net Ich verwende in meinem web.config:

  

konnte nicht Schemainformationen finden   das Element 'log4net' ...

Im Folgenden sind die relevanten Teile meines 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>

Gelöst:

  1. Kopieren jeden log4net bestimmten Tages zu einer separaten xml-Datei. Stellen Sie sicher, .xml als Dateierweiterung verwenden.
  2. Fügen Sie die folgende Zeile in AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "xmlFile.xml", Watch = true)]

nemo hinzugefügt:

  

Nur ein Wort der Warnung an alle   befolgen Sie die Ratschläge der Antworten in   Dieser Thread. Es ist eine mögliche   Sicherheitsrisiko durch die log4net mit   Konfiguration in einem XML-off der Wurzel   der Web-Service, wird, wie es sein   zugänglich standardmäßig für jeden. Gerade   wenn Ihre Konfiguration empfohlen werden   sensible Daten enthält, können Sie wollen   um es sonst wo.


@wcm: Ich habe versucht, eine separate Datei. Ich habe die folgende Zeile AssemblyInfo.cs

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

und setzt alles mit log4net in dieser Datei zu tun, aber ich immer noch die gleichen Nachrichten erhalten.

War es hilfreich?

Lösung

Ich hatte eine andere Perspektive, und benötigen die folgende Syntax:

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

, die unterscheidet sich von den letzten Beitrag des xsl, machte aber einen Unterschied für mich. Sehen Sie sich diese Blog-Post , half es mir.

Andere Tipps

Sie können auf das log4net Element in einem Schema binden. Es gibt ein paar im Umlauf, die meisten voll verfügbar für die verschiedenen Optionen nicht zur Verfügung stellen. Ich habe die folgende XSD so viel Überprüfung wie möglich zur Verfügung zu stellen: http://csharptest.net/downloads/schema/log4net.xsd

Sie können es in die xml binden leicht durch das log4net Element ändern:

<log4net 
     xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

Nur ein Wort der Warnung an alle die Ratschläge der Antworten in diesem Thread folgen. Es besteht ein mögliches Sicherheitsrisiko die log4net-Konfiguration in einem XML-off der Wurzel des Web-Service, indem er, wie es jedem standardmäßig zugänglich sein wird. Nur beachten Sie, wenn Ihre Konfiguration sensible Daten enthält, können Sie es setzen sonst wo.

Ich glaube, Sie die Nachricht sehen, weil Visual Studio nicht weiß, wie der log4net-Abschnitt der Konfigurationsdatei zu validieren. Sie sollten dieses Problem beheben, indem er die log4net XSD in C kopieren: \ Programme \ Microsoft Visual Studio 8 \ XML \ Schemas (oder wo auch immer Ihr Visual Studio installiert ist). Als zusätzlichen Bonus sollten Sie jetzt Intellisense Unterstützung erhalten für log4net

Eigentlich brauchen Sie nicht auf die Erweiterung .xml zu bleiben. Sie können eine beliebige andere Erweiterung im ConfigFileExtension Attribute angeben:

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

@steve_mtl: Ändern der Dateierweiterungen von .config .xml das Problem gelöst. Danke.

@Wheelie. Ich konnte Ihren Vorschlag nicht versuchen, weil ich eine Lösung benötigt, die mit einer unmodifizierten Visual Studio-Installation funktioniert


Um es zusammenzufassen, ist hier, wie das Problem zu lösen:

  1. Kopieren jeden log4net bestimmten Tages zu einer separaten xml-Datei. Stellen Sie sicher, .xml als Dateierweiterung verwenden.
  2. Fügen Sie die folgende Zeile in AssemblyInfo.cs:

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

Für VS2008 nur die log4net.xsd Datei zu Ihrem Projekt hinzufügen; VS sieht im Projektordner sowie das Installationsverzeichnis, das Wheelie erwähnt.

Auch eine .config Erweiterung anstelle von .xml vermeidet das Sicherheitsproblem, da IIS dient nicht * .config-Dateien standardmäßig aktiviert.

Roger Antwort , wo er ein Schema zur Verfügung gestellt, arbeitete das sehr gut für mich sei denn, ein Kommentator erwähnt

  

Diese XSD beschwert sich über die Verwendung von benutzerdefinierten Appen. Es kann nur für eine appender aus dem Standardsatz (als Enum definiert ist), anstatt einfach machen dies ein String-Feld

I modifiziert, um das ursprüngliche Schema, das eine xs:simpletype namens log4netAppenderTypes hatte und die Aufzählungen entfernt. Ich kann es stattdessen zu einem Muster Basic .NET Typisierung beschränkt (I Grund sagen, weil es unterstützt nur Type-Name nur, oder Typname, Montag -. Aber jemand es verlängern

Ersetzen Sie einfach die log4netAppenderTypes Definition mit der folgenden in der 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>

Ich bin vorbei diese wieder auf den ursprünglichen Autor, wenn er will es in seiner offiziellen Version aufzunehmen. Bis dahin müßten Sie die XSD herunterladen und ändern und sie in einer relativen Weise verweisen, zum Beispiel:

<log4net
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="../../../Dependencies/log4net/log4net.xsd">
  <!-- ... -->
</log4net>

Haben Sie versucht, eine separate log4net.config Datei mit?

habe ich ein Test asp Projekt von Puting die XSD-Datei in den Visual Studio-Schemata Ordner zu erstellen, wie oben beschrieben (für mich ist C: \ Programme \ Microsoft Visual Studio 8 \ XML \ Schema) und dann mache meine web.config wie folgt aussehen:

<?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>

Ohne Ihre Visual Studio-Installation zu ändern und Berücksichtigung richtige Versionierung / etc zu nehmen. unter dem Rest Ihres Teams, die XSD-Datei zu Ihrer Lösung hinzu (als ‚Lösung Item‘), oder wenn Sie es für ein bestimmtes Projekt möchten, betten sie einfach da.

Ich bemerkte es ein bisschen spät, aber wenn man die Beispiele sehen in Log4Net Sie liefert können sie alle Konfigurationsdaten in eine app.config, mit einem Unterschied, die Registrierung von configsection sehen setzen:

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

Könnte die Definition es als Typ „System.Configuration.IgnoreSectionHandler“ der Grund, Visual Studio zeigt keine Warnung / Fehlermeldungen auf den log4net Sachen?

Ich folgte Kit 's Antwort https://stackoverflow.com/a/11780781/6139051 und es nicht für AppenderType Werte wie gearbeitet "log4net.Appender.TraceAppender, log4net". Die log4net.dll Baugruppe hat die Assembly von „log4net“, das heißt der Assemblierung-Name keinen Punkt im Innern hat, das war, warum die Regex in Kit Antwort nicht funktioniert hat. Ich muß das Fragezeichen nach der dritten klammerten Gruppe in der regexp hinzuzufügen, und nach, dass es einwandfrei funktionierte.

Die modifizierte Regex sieht wie folgt aus:

<xs:pattern value="[A-Za-z_]\w*(\.[A-Za-z_]\w*)+(\s*,\s*[A-Za-z_]\w*(\.[A-Za-z_]\w*)?+)?"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top