2009-04-16 4 views
12

Ich teste ELMAH und habe absichtlich die Datenbankverbindung für das ELMAH-Protokoll in meiner Anwendung ausgeschaltet, um zu sehen, was in der Produktion passieren wird, wenn die Datenbank nicht verfügbar ist.ELMAH SQL Error Handler-Datenbank nicht verfügbar - Was passiert mit der Protokollierung?

Es scheint, dass ELMAH seine eigenen Fehler nicht abfangen kann - die AXD-Datei ist nicht verfügbar, wenn das SQL-Datenbankprotokoll fehlschlägt.

Was ist das beabsichtigte Verhalten von ELMAH, wenn die Datenbank nicht verfügbar ist?

Wie kann ich meine Fehler diagnostizieren, wenn dies auftritt?

+1

+1 zum Nachdenken über Worst-Case-Szenarien, bevor sie passieren! –

Antwort

0

Nicht wirklich sicher über ELMAH, aber das erwartete Verhalten solcher Logging-Frameworks ist nicht, irgendwelche Ausnahmen zu werfen, wenn etwas mit ihnen schief geht. I.e. Wenn ELMAHs Datenbank nicht verfügbar ist, würde ich annehmen, dass die Fehler nicht in der Datenbank gespeichert werden.

Wie oben erwähnt, können/sollten Sie alternative Senken verwenden - E-Mail oder Flatfile.

0

Sie können immer die Option xml file verwenden, um Ihre Fehler zu protokollieren.

0

Ich denke, dass Sie Kontexte ein wenig mischen.

ELMAHs Verhalten, wenn die Datenbank nicht verfügbar ist, besteht darin, keine Fehler in der Datenbank zu protokollieren. Wenn eine Ausnahme auf dem Server ausgelöst wird oder wenn Sie eine Ausnahme über eine ErrorSignal auslösen, wird ELMAH die Ausnahme entweder an einen gelben Bildschirm oder eine benutzerdefinierte Fehlerseite weitergeben (Ihre Einstellung).

Since Errors.axd Seite ist nur für diejenigen zugänglich, die es sehen sollten (im Idealfall), es ist in Ordnung, diesen Fehler dem Benutzer zu präsentieren.

Die Quintessenz ist, dass, wenn die Datenbank Fehler ist nicht Fehler diagnostiziert werden können. Wenn dies der Fall wäre, hätten wir größere Probleme, da die Fehlerdatenbank mit der Produktionsdatenbank übereinstimmt.


Ich würde auch empfehlen, XML-Protokollierung für Ihre primäre Protokollierungsquelle zu verwenden. SQL Server wird Ihnen die beste Leistung bieten, ohne die Dateien verwalten zu müssen. Bei der XML-Protokollierung ist dies nicht der Fall.

+0

Während des Debuggens mit ELmah.dll im Verzeichnis web \ bin verursachte die Webanwendung einen Fehler in einer der Elmah-Quelldateien (angezeigt durch die Informationen aus der Datei elmah.pdb), wenn sie nicht zur Datenbank gelangen konnte. Also - es wird eine unbehandelte Ausnahme auslösen. Funktionieren andere ELMAH Logger in diesem Fall? – Caveatrob

+0

Ich weiß es nicht, ich habe noch nie versucht zu versagen. Das Elmah-Projekt ist ziemlich solide, also bin ich mir sicher, dass sie daran gedacht haben. Sie müssen nur graben. –

12

Es scheint, dass ELMAH kann nicht Fall seine eigenen Fehler

ELMAH tut Fall seine eigenen Fehler zu einem gewissen Grad. Wenn die ErrorLogModule beim Versuch, den Fehler zu protokollieren, auf eine Ausnahme stößt, wird die aus der Protokollierung resultierende Ausnahme an die standardmäßige Trace-Einrichtung von .NET Framework gesendet. Siehe line 123 from 1.0 sources. Siehe auch die folgenden Freilos von der ASP.NET-Dokumentation für die .NET Framework-Standardverfolgung immer mit ASP.NET Arbeits Tracing:

Walkthrough: Integrating ASP.NET Tracing with System.Diagnostics Tracing

der AXD-Datei nicht verfügbar ist, wenn die SQL-Datenbankprotokoll schlägt fehl.

Das ist richtig. Die SQL Server-Datenbankverbindung muss funktionsfähig sein, um Fehler anzuzeigen, die in einer SQL Server-Datenbank gespeichert sind, wenn SqlErrorLog verwendet wird.

Was ist das beabsichtigte Verhalten von ELMAH , wenn die Datenbank nicht verfügbar ist?

Wenn beispielsweise die SQL Server-Datenbank inaktiv ist, wird beim Protokollieren eine SqlException angezeigt. ELMAH sendet dann den Objektinhalt SqlException an die Standard-Trace-Einrichtung von .NET Framework.

Wie kann ich meine Fehler diagnostizieren, wenn diese auftritt?

Die beste Option ist auch hier und E-Mail-Versand von Fehlern Anmeldung zu ermöglichen. Wenn die Datenbank nicht verfügbar ist, besteht die Möglichkeit, dass das Mailgateway aktiv ist und Sie weiterhin über Fehler informiert werden. Die Fehler werden in der Tat geloggt in einigen Mailbox (en). Dies hat auch den zusätzlichen Vorteil, dass, wenn das Mail-Gateway jemals ausgefallen ist, die Wahrscheinlichkeit besteht, dass die Datenbank hochgefahren ist und Fehler dort protokolliert werden. Wenn beide jedoch ausgefallen sind, müssen Sie Ihre Produktionsinfrastruktur ernsthaft überprüfen und möglicherweise Maßnahmen zur Überwachung des Systemzustands durch zusätzliche Maßnahmen ergreifen.