2009-03-24 5 views
13

Es scheint, dass Log4Net still aus Gründen, die nicht offensichtlich sind, herunterfährt, und ich bin ratlos, wie man es behebt. Meine Ahnung ist, dass ein bestimmter Appender eine bestimmte Log-Nachricht auslässt und das den gesamten Stack herunterzufahren scheint.Wie loggt man log4net ein, wenn es aufhört zu loggen

Gibt es eine Möglichkeit, Log4Net dazu zu bringen, eine Exception (zumindest während unserer Debug-Phase) auszulösen, anstatt einen Dienst herunterzufahren.

Antwort

13

Ich denke, es gibt einen Konfigurationswert, den Sie im Abschnitt appSettings Ihre app.config/web.config auf internen Debug-Anweisungen in log4net einzuschalten setzen kann:

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

Dies Ihnen einen Einblick in jeden geben Fehler, die log4net möglicherweise verschluckt.

+5

Nach ein wenig mehr Graben (nach Ihrem Zeiger, um das interne Debuggen zu aktivieren, sieht es aus, als würde ein Listener für die System.Diagnostics.Trace aktiviert werden. –

+3

Es sollte auch beachtet werden, dass appSettings vor dem System gehen muss.Diagnoseattribut – Dan

22

auf der vorherigen Antwort Ausbau -

Um einen Trace-Listener für das log4net.Internal.Debug Spur hinzufügen möchten, fügen Sie diese zu Ihrer App config:

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

Ersetzen der initializeData Wert Attribut oben mit gewünschter Protokolldateipfad. Stellen Sie sicher, dass der Anwendungs- oder ASP.NET-Serverprozess über die Berechtigung verfügt, in diese Datei zu schreiben.

Sie können auch die Nachrichten überprüfen, die beim Start von der log4net-Konfiguration zurückgegeben werden. Ab der log4net-Version 1.2.11 geben die XmlConfigurator.Configure() -Methoden eine ICollection zurück, die Strings enthält, die Probleme auflisten, die während des Konfigurationsprozesses aufgetreten sind.

Wenn Sie also so etwas wie dies bekommen:

XmlConfigurator.Configure(); 

Änderung es

ICollection configMessages = XmlConfigurator.Configure(); 

und inspizieren configMessages in einem Debugger, oder sie irgendwo ausdrucken, z.B.

foreach (string msg in configMessages) 
{ 
    Console.WriteLine(msg); 
} 

Wenn alles andere fehlschlägt, laden Sie die log4net Quelle, um das Projekt zu Ihrer Lösung hinzufügen und das Projekt statt log4net.dll verweisen. Jetzt können Sie im Debugger auf die log4net-Aufrufe zugreifen.

0

Ich hatte eine harte Zeit herauszufinden, warum die Dateiprotokoll und SQL Log Appender nicht funktionierten. Ich hatte die Standard-SQL-Tabelle geändert und es stellt sich heraus, dass der Datentyp Int nicht gut war und Int32 der richtige Wert war. Ich konnte diese Informationen nicht finden, bis ich in Visual Studio debuggen und in die Protokollierungsmethode einstieg. Durchführung des Verfahrens wurde auf meinem Haltepunkt angehalten und ich lief den Setup-Befehl in den Direkt-Fenstern:

log4net.Config.XmlConfigurator.Configure()

konnte ich unmittelbares Feedback, um zu sehen, und es war in-fact Eine Ausnahme wurde ausgelöst, als der Konfigurationscode ausgeführt wurde. Es wurde im Direktfenster angezeigt und ich konnte das Problem beheben.

Hoffentlich hilft das jemand.

Verwandte Themen