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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow