Hey, ich habe diese Konfiguration in meiner web.config
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="mylog.log" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="" />
<param name="Footer" value="" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
aber log4net funktioniert nicht. Mein Projekt lässt sich gut kompilieren und ich bekomme auch keine Fehler beim Debuggen. Die Zeilen, in denen ich aufgefordert werde, werden log.debug("somemessage")
einwandfrei ausgeführt, aber ich kann die mylog.log
Datei nicht finden. Wo ist sie also?
Antworten:
Ein Problem für diese Art von Dingen besteht darin, sicherzustellen, dass das
XmlConfigurator
Attribut der Assembly hinzugefügt wird, indem Sie die folgende Zeile in Ihr Feld einfügenAssemblyInfo.cs
:Andernfalls wird log4net nie aktiviert.
quelle
AssemblyInfo
sobald Sie gedacht haben.Ich denke, dass entweder log4net überhaupt nicht protokolliert wird oder die Datei nicht dort landet, wo Sie es erwarten.
Erstens haben Sie tatsächlich angerufen
irgendwo in deinem Code? Wenn sich das obige XML-Snippet in der Anwendungskonfigurationsdatei befindet, reicht dieser Aufruf aus. Wenn sich das XML-Snippet in einer eigenen Datei befindet, müssen Sie die
.Configure(string)
Überladung verwenden, die den Pfad zur Datei verwendet. Ohne diesen Aufruf (oder anscheinend das von Kirk Woll erwähnte Attribut auf Assembly-Ebene) wird log4net überhaupt nicht protokolliert.Wenn Sie der Meinung sind, dass dies alles erledigt ist und log4net protokolliert werden sollte, sollten Sie möglicherweise einen vollständig qualifizierten Pfad für die Protokolldatei eingeben, während Sie weiter debuggen. So können Sie sicher sein, wo sich die Datei befinden soll .
quelle
Es gibt noch ein kleines Problem, siehe hier: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config
Die
[assembly: log4net.Config.XmlConfigurator]
Methode funktioniert nicht mit app.config. Wenn Sie log4net über app.config konfigurieren, müssen Sie dielog4net.Config.XmlConfigurator.Configure()
Methode verwenden.quelle
Hier ist meine Checkliste, wenn sich log4net als widerspenstig erweist:
quelle
Für ein ASP.NET MVC-Projekt hinzufügen
zur Global.asax.cs hilft auch:
quelle
Dies sind die Schritte, mit denen meine Dateiprotokollierung funktioniert hat:
<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>
<add key="log4net.Internal.Debug" value="true"/>
dazu Ihre hinzuappSettings
.quelle
Ich habe Erfahrungen gemacht, bei denen Protokollierungssysteme ohne Ausnahmen stillschweigend ausfallen. Ich nehme an, dies ist sinnvoll, denn wenn der Logger Fehler protokolliert, wie kann er dann einen Fehler protokollieren, der keine Protokollierung durchführen kann?
Wenn die Datei nicht auf der Festplatte erstellt wurde, überprüfen Sie zunächst die Dateisystemberechtigungen um sicherzustellen, dass der Benutzer, unter dem Ihre Anwendung ausgeführt wird, eine neue Datei auf diesen Speicherort schreiben kann.
Zu Testzwecken möchten Sie möglicherweise die Datei auf der Festplatte, auf die geschrieben werden soll, manuell erstellen und jedem die Berechtigung zum Schreiben geben. Wenn der Logger anfängt, darauf zu schreiben, wissen Sie, dass er eher auf Berechtigungen als auf Konfigurationen basiert.
quelle
Ich habe vergessen, die zu kopierende Konfigurationsdatei zu markieren, während die App kompiliert wird.
Klicken Sie einfach mit der rechten Maustaste auf die Datei log4net.config, wählen Sie die Eigenschaft aus und wählen Sie dann In Ausgabeverzeichnis kopieren, um XXXX zu kopieren
quelle
Ich habe alles versucht, aber nichts hat funktioniert. Das Hinzufügen dieser Zeile im Abschnitt von app.config hat
configSections
bei mir funktioniert.Stellen Sie sicher, dass
Version
undPublicKeyToken
korrekt istquelle
sagt "schreibe mylog.log in den aktuellen Ordner". Wenn sich Ihre Webanwendung unter IIS befindet, wird das Protokoll in C: \ inetpub \ wwwroot \ appname \ mylog.log geschrieben.
Wenn keine Protokolldatei vorhanden ist, hat das Konto, unter dem die App ausgeführt wird, möglicherweise keine Schreibberechtigung für den Ordner. Sie können Process Monitor über SysInternals ausführen, um festzustellen, ob und wo eine Datei geschrieben wird.
Führen Sie VS auch im Debug-Modus aus, um festzustellen, ob Ausnahmen ausgelöst werden (Debug-> Ausnahmen-> CLR-Ausnahmen, aktivieren Sie Thrown).
quelle
In meinem Fall habe ich vergessen, die Eigenschaften der Datei log4Net.config als "Inhalt" festzulegen, damit die Datei nicht in die Bereitstellung aufgenommen wurde. Also pass auf:
quelle
Leider hat keines der oben genannten Probleme geholfen. Die explizite Konfiguration in der Klasse, die zusätzlich zu den vorherigen Einstellungsvorschlägen protokolliert werden soll, hat mir geholfen.
quelle
Auch nach einigen Stunden fand ich heraus, warum es bei mir nicht funktionierte ...
ich hatte:
aber es sollte sein:
Stellen Sie also sicher, dass sich der ILog in der ersten Zeile befindet.
quelle