213 Stimmen

Wie man log4net-Probleme aufspürt

Ich verwende log4net ständig, aber ich habe noch nie herausgefunden, wie ich feststellen kann, was im Inneren vor sich geht. Zum Beispiel habe ich einen Konsolen-Appender und einen Datenbank-Appender in meinem Projekt. Ich habe ein paar Änderungen an der Datenbank und am Code vorgenommen, und jetzt funktioniert der Datenbank-Appender nicht mehr. Ich werde irgendwann herausfinden, warum, aber es würde mir sehr helfen, wenn ich sehen könnte, was in log4net vor sich geht.

Erzeugt log4net irgendeine Art von Ausgabe, die ich einsehen kann, um die Ursache meines Problems zu ermitteln?

319voto

David Espart Punkte 11102

Zunächst müssen Sie diesen Wert in der Konfigurationsdatei der Anwendung festlegen:

<configuration>
   <appSettings>
      <add key="log4net.Internal.Debug" value="true"/>
   </appSettings>
</configuration>

Um die Datei zu bestimmen, in der Sie die Ausgabe speichern möchten, können Sie den folgenden Code in dieselbe .config-Datei einfügen:

<configuration>
...

<system.diagnostics>
    <trace autoflush="true">
        <listeners>
            <add 
                name="textWriterTraceListener" 
                type="System.Diagnostics.TextWriterTraceListener" 
                initializeData="C:\tmp\log4net.txt" />
        </listeners>
    </trace>
</system.diagnostics>

...
</configuration>

Eine ausführlichere Erklärung finden Sie unter 'Wie aktiviere ich das interne Debugging von log4net? in der log4net FAQ-Seite .

50voto

Bolo Punkte 1424

Wenn Sie eine log4net-Konfigurationsdatei verwenden, können Sie das Debugging auch dort einschalten, indem Sie den obersten Knoten zu ändern:

<log4net debug="true">

Dies wird funktionieren, sobald die Konfiguration neu geladen wurde und unter der Voraussetzung, dass Ihr Trace-Listener richtig eingerichtet ist.

28voto

JP Toto Punkte 992

Zusätzlich zur obigen Antwort können Sie diese Zeile verwenden, um das Protokoll in Echtzeit anstelle von c zu sehen: \tmp\log4net.txt Ausgabe.

log4net.Util.LogLog.InternalDebugging = true;

In einer Konsolenanwendung können Sie dies beispielsweise hinzufügen und dann die Ausgabe in Echtzeit beobachten. Es ist gut für das Debugging von log4net in einem kleinen Test-Harness, um zu sehen, was mit dem Appender passiert, den Sie testen.

10voto

K0D4 Punkte 2084

Stellen Sie sicher, dass die Root-Anwendung, in der sich Ihr Einstiegspunkt befindet, etwas an log4net meldet. Geben Sie eine der folgenden Möglichkeiten an:

private static ILog logger = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
    logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString());

Mit 2.0.8, hatte ich eine interessante Situation. Ich erstellte ein Bibliotheksprojekt und ein Test-Exe-Projekt, das die Fähigkeiten des Projekts demonstrieren sollte. Das Bibliotheksprojekt war auf die Verwendung von Log4net eingestellt, ebenso wie das Exe-Projekt. Das Exe-Projekt verwendete das Assemblyinfo-Attribut, um die Konfiguration zu registrieren, aber ich erhielt keine Logging-Ausgabe auf der Konsole oder in der Log-Datei. Als ich die interne Debug-Protokollierung von Log4net einschaltete, wurden zwar einige interne Meldungen auf die Konsole geschrieben, aber immer noch keine meiner normalen Protokolle. Es wurden keine Fehler gemeldet. Alles begann zu funktionieren, als ich den obigen Code zu meinem Programm hinzufügte. Log4net war ansonsten korrekt konfiguriert.

3voto

StuartN Punkte 321

Wenn das interne Protokoll nicht genügend Informationen liefert, ist es sehr einfach, das Protokoll zu erstellen und zu debuggen. Quellcode . Wenn Sie dies nicht mit Ihrem Entwicklungsprojekt verwechseln wollen, fügen Sie eine einfache Konsolenanwendung hinzu, die nur eine Nachricht protokolliert, kopieren Sie die log4net.config zu dieser Anwendung hinzufügen und die betreffende Klasse debuggen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X