log4net
Log4Net Fehlerbehebung
Suche…
Einführung
Log4net ist ein Fail-Stop-Protokollierungssystem. Fail-Stop bedeutet, dass die Protokollierung bei einer internen Ausnahmebedingung gestoppt wird und der Entwurf nicht mit dem Programmablauf interagiert. Wenn Sie wissen, dass dies die Problembehandlung von log4net erleichtert, ist dies nicht so einfach. Wenn die Protokollierung fehlschlägt, wird Ihr Programm dies nicht bemerken. Sie sehen viele Fragen zu: Warum funktioniert meine Log4net-Protokollierung nicht? Dieser Artikel beschreibt die grundlegende Problembehandlung und die gängigsten Lösungen.
In den meisten Fällen besteht der erste Schritt darin, das interne Debugging für log4net zu aktivieren.
Aktivieren Sie das interne Debugging
Es gibt zwei Möglichkeiten, das interne Debugging in log4net zu aktivieren:
- Geben Sie die Option log4net.Internal.Debug in der Konfigurationsdatei der Anwendung an
- Aktivieren Sie programmgesteuert den internen Debugging von log4net
Geben Sie die Option log4net.Internal.Debug in der Konfigurationsdatei der Anwendung an
Dies ist die bevorzugte Methode, um das interne Debugging zu aktivieren. Fügen Sie den Schlüssel "log4net.Internal.Debug" zur Datei "app.config" Ihrer Anwendung hinzu.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
Die Debug-Protokollierung wird sofort gestartet, wenn die Anwendung gestartet wird.
Aktivieren Sie programmgesteuert den internen Debugging von log4net
Eine zweite Möglichkeit besteht darin, dies programmgesteuert durchzuführen. Setzen Sie die Eigenschaft log4net.Util.LogLog.InternalDebugging auf true:
log4net.Util.LogLog.InternalDebugging = true;
Interne Debug-Protokollausgabe
Interne Debugging-Meldungen werden in die Konsole und in die System.Diagnostics.Trace geschrieben. Wenn Sie die Ausgabe der Konsole konservieren müssen, können Sie die System.Console.Out umleiten. Oder Sie können die Ablaufverfolgungsnachricht in eine Datei umleiten:
<configuration>
...
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\tmp\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
...
</configuration>
Gepufferte Appender
Einige der log4net-Appender sind gepufferte Appender. Diese Appender protokollieren nur, wenn eine bestimmte Anzahl von Nachrichten protokolliert wird. Einige Beispiele sind der SmtpAppender, RemotingAppender oder der AdoNetAppender. Diese Appender haben eine Einstellung BufferSize:
<bufferSize value="100" />
Dies bedeutet, dass der Logger protokolliert, wenn 100 Nachrichten im Puffer vorhanden sind. Wenn Sie den Appender testen möchten, können Sie die bufferSize auf 1 setzen.
Wenn Sie den Puffer bei einem Fehler löschen möchten, können Sie einen Evaluator verwenden:
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
Wenn die Bedingung des Auswerters erfüllt ist, wird der Puffer geleert.
Configure () wurde nicht oder mehrmals aufgerufen
Wenn keine Protokollierung angezeigt wird, können Sie überprüfen, ob Configure() in Ihrer Anwendung aufgerufen wird. Der einfachste Weg ist, es Ihrer Baugruppe als Attribut hinzuzufügen:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
Dann müssen Sie log4net.Config.XmlConfigurator.Configure() keiner Stelle Ihrer Konfiguration hinzufügen. Oder Sie können log4net.Config.XmlConfigurator.Configure() in einer Ihrer Startmethoden hinzufügen. Stellen Sie sicher, dass Sie die Konfiguration nur einmal aufrufen.
Datei-Appender schreibt nicht
Wenn Sie über einen Datei-Appender verfügen, stellen Sie sicher, dass Sie an einen Ort schreiben, an dem der Benutzer die Dateien erstellen und aktualisieren darf. Andernfalls schlägt die Protokollierung fehl. Sie können dies überprüfen, wenn das interne Debugging aktiviert ist.