2009-09-08 2 views
23

Wir haben ein einzelnes SQL-Protokoll zum Speichern von Fehlern aus mehreren Anwendungen. Wir haben die Seite elmah.axd für jede unserer Anwendungen deaktiviert und möchten eine neue Anwendung, die Fehler von allen Apps anzeigt, die Fehler im allgemeinen SQL-Protokoll melden.Verwenden Sie einzelne Elmah.axd für mehrere Anwendungen mit einzelnen DB-Protokoll

Obwohl die Anwendung für alle Fehler das allgemeine SQL-Protokoll verwendet, werden jetzt nur Fehler aus der aktuellen Anwendung angezeigt. Hat jemand das schon mal gemacht? Was innerhalb des Elmah-Codes muss möglicherweise optimiert werden?

+1

Danke für die Frage so eine schöne Frage in klarer Weise, Sie haben meine Worte mit Time Machine genommen. Es ist jetzt fast 6-7 Jahre später. – AKS

Antwort

30

Ich nehme an mit "SQL Log" meinst du MSSQL Server ... Wenn ja, wäre wahrscheinlich die einfachste Art zu erreichen, was Sie wollen, die gespeicherten Prozeduren in der SQL Server-Datenbank erstellt, die Ihre Fehler enthält.

die Fehlerliste zu erhalten, ruft die ELMAH dll den ELMAH_GetErrorsXML proc mit dem Anwendungsnamen als Parameter, filtert dann die proc die Rückkehr mit einer Klausel WHERE [Application] = @Application.

Entfernen Sie einfach die WHERE-Klausel aus dem ELMAH_GetErrorsXML Proc, und alle Fehler sollten unabhängig von der Anwendung zurückgegeben werden.

Um einen einzelnen Fehler Datensatz richtig zu bekommen, müssen Sie das gleiche mit dem ELMAH_GetErrorXML proc tun, da es auch nach Anwendung filtert.

Dies betrifft natürlich jede Anwendung, die Fehler aus dieser speziellen Datenbank abruft, aber ich nehme an, in Ihrem Fall haben Sie nur die eine, also sollte das gut sein.

CAVEAT: Ich habe nicht versucht, so kann ich die Ergebnisse nicht garantieren ...

+0

Richtig! Ich schaue mir die Modifikationen an. – RSolberg

+1

@E.King, Danke deine Antwort funktioniert wie ein Charme ... – AKS

2

Ja, es funktioniert einfach. Sie können den App-Namen jedoch nicht in Elmah/Default.aspx sehen. Ich habe nicht gefunden, wenn es konfugierbar ist - nur eine Spalte mehr anzeigen.

+1

Das stimmt. Das Layout für diese Seite ist im Code ErrorLogPage.cs definiert. Um eine weitere Spalte hinzuzufügen, müssen Sie die Quelle herunterladen, die Änderungen vornehmen und erneut kompilieren. http://code.google.com/p/elmah/source/browse/trunk/src/Elmah/ErrorLogPage.cs –

4

Es ist kein Problem, die standardmäßige Elmah-Handler-Factory zu überschreiben, so dass Elmah-Logs von Anwendungen gefiltert werden. Ich habe eine Beispiel-App geschrieben, die zeigt, wie man es mit MySql macht: http://diagnettoolkit.codeplex.com/releases/view/103931. Sie können auch eine post on my blog überprüfen, wo ich erkläre, wie es funktioniert.

+0

+1 - so soll es gemacht werden. Sauber und einfach und keine Notwendigkeit, entweder die ursprünglichen DDL-Skripte oder den Elmah-Quellcode zu ändern. Der Blogbeitrag erklärt alles. Gute Arbeit, mein Herr! –

+0

Ich habe das gerade implementiert. Funktioniert gut! –

+0

Dies ist eine schöne Alternative. Der Nachteil ist jedoch, dass Sie immer nur Fehler von einer Anwendung gleichzeitig sehen können, und Sie müssen den Namen der Anwendung im Voraus wissen. Wenn Sie eine Liste von Fehlern in allen Anwendungen sehen wollen (so habe ich die Frage interpretiert), wird dies nicht funktionieren, es sei denn, ich sehe das Stück nicht. –