2009-04-16 15 views
140

Ich benutze log4net die ganze Zeit, aber eine Sache, die ich nie herausgefunden habe, ist, wie man erzählt, was im Inneren passiert. Zum Beispiel habe ich einen Konsolenappender und einen Datenbankappender in meinem Projekt. Ich habe ein paar Änderungen an der Datenbank und dem Code vorgenommen, und jetzt funktioniert der Datenbank-Appender nicht mehr. Ich werde herausfinden, warum, aber es würde mir sehr helfen, wenn ich sehen könnte, was in log4net passiert.Wie Log4net-Probleme aufzuspüren

Generiert Log4net irgendeine Art von Ausgabe, die ich anzeigen kann, um die Quelle meines Problems zu ermitteln?

Antwort

224

Zuerst müssen Sie diesen Wert auf der Anwendungskonfigurationsdatei gesetzt:

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

, dann die Datei, um zu bestimmen, in dem Sie die Ausgabe speichern möchten, können Sie den folgenden Code in der gleichen CONFIG-Datei hinzufü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> 

Sie eine ausführlichere Erklärung unter ‚Wie aktiviere ich log4net interne Debugging?‘ finden in der log4net FAQ page.

+7

Stellen Sie sicher, dass der Prozess, unter dem Ihre Anwendung ausgeführt wird, über Rechte für den Pfad verfügt, in dem Sie Ihre Protokolldatei erstellen möchten ("C: \ tmp \ log4net.txt" im obigen Beispiel) – Jtrx

+0

dies ist die fehlende Tipp, um zu finden, was passiert in meiner App Dank: D – NFRiaCowboy

+2

Sieht aus wie das interne Debugging hat keine Zeitstempel – snit80

15

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

Zum Beispiel können Sie in einer Konsolen-App diese hinzufügen und dann die Ausgabe in Echtzeit beobachten. Es ist gut für das Debugging von log4net in einem kleinen Test-Netzwerk, um zu sehen, was mit dem Appender passiert, den Sie testen.

24

Wenn Sie eine log4net Config-Datei verwenden, können Sie auch dort auf dem Debuggen einschalten, indem Sie den obersten Knoten Wechsel zu:

<log4net debug="true"> 

dies funktionieren wird, sobald die Konfiguration neu geladen wird und Ihre Spur Hörer unter der Annahme korrekt eingerichtet .

0

Wenn das interne Protokoll Ihnen nicht genügend Informationen gibt, ist es sehr einfach, das source code zu erstellen und zu debuggen. Wenn Sie dies nicht mit Ihrem Entwicklungsprojekt verwechseln möchten, fügen Sie eine einfache Konsolenanwendung hinzu, die nur eine Nachricht protokolliert, die log4net.config Ihres Projekts in diese Anwendung kopiert und die betreffende Klasse debuggt.

0

Stellen Sie sicher, dass die Stammanwendung, an der Ihr Einstiegspunkt liegt, etwas bei log4net protokolliert. Geben Sie eine davon:

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 habe ein Bibliotheksprojekt und ein Test-Exe-Projekt erstellt, das die Fähigkeiten des Projekts demonstrieren sollte. Das Bibliotheksprojekt wurde so eingerichtet, dass Log4net wie das EXE-Projekt verwendet wurde. Das exe-Projekt verwendete das assemblyinfo-Attribut, um die Konfiguration zu registrieren, aber ich bekam keine Protokollausgabe an die Konsole oder die Protokolldatei. Als ich die log4net-interne Debug-Protokollierung angeschaltet habe, habe ich einige interne Nachrichten an die Konsole geschrieben, aber immer noch keine meiner normalen Protokolle. Es wurden keine Fehler gemeldet. Alles begann zu arbeiten, als ich den obigen Code zu meinem Programm hinzufügte. Log4net wurde ansonsten korrekt eingerichtet.

Verwandte Themen