Frage

Ich habe eine benutzerdefinierte Ausnahme, die für ein sehr spezifisches problem, das schief gehen kann.Erhalte ich Daten von einem anderen system aus, und ich Hebe die Ausnahme, wenn es Bomben, während Sie versuchen, zu analysieren Daten.In meine benutzerdefinierte Ausnahme, ich habe ein Feld namens "ResponseData", so kann ich genau verfolgen, was mein code nicht bewältigen konnte.

In benutzerdefinierten Ausnahmen wie diese, sollte das extra-response-Daten gehen in die Ausnahme "Nachricht"?Wenn es geht, die Nachricht könnte riesig sein.Ich will es, denn ich bin mit Elmah, und das ist, wie ich an die Daten.

Die Frage ist also entweder:- Wie bekomme ich Elmah aufzeichnen, zusätzliche Informationen aus einem Feld in einer benutzerdefinierten Ausnahme ODER - Sollte extra exception details gehen Sie in das "Nachricht" - Eigenschaft?

War es hilfreich?

Lösung

Sie sollten nicht ausfüllen .Message mit debug-Informationen, sondern vielmehr mit einem kurzen, hilfreichen text.

http://msdn.microsoft.com/en-us/library/system.exception.message.aspx

Der text der Nachricht sollte eine vollständige Beschreibung der Fehler und sollte, wenn möglich, zu erklären, wie es zu korrigieren. Der Wert des Message-Eigenschaft in der zurückgegebenen Informationen von ToString.

Die Message-Eigenschaft nur beim erstellen einer Ausnahme.Wenn keine Nachricht angegeben wurde, die an den Konstruktor für die aktuelle Instanz, die das system liefert eine Standardmeldung, die formatiert ist wie die aktuelle system-Kultur.

[..]

Hinweise zu Erben:

Die Message-Eigenschaft überschrieben, in Klassen, erfordern Kontrolle über den Inhalt oder format.Der code der Anwendung in der Regel greift auf diese Eigenschaft, wenn es benötigt zum anzeigen von Informationen über eine Ausnahme, die abgefangen wurde.

Sollte die Fehlermeldung lokalisiert werden.

Response-Daten gelten nicht als Beschreibung.

Nicht vertraut mit elmah, ich kann Ihnen nicht sagen, wie zu verlängern Exception Klasse, während es zu benutzen.Tut elmah Umsetzung Ihrer eigenen Unterklasse Exception?Oder ein interface?Können Sie eine Unterklasse es sich?

Andere Tipps

In benutzerdefinierten Ausnahmen wie diese, sollten die extra-response-Daten gehen in der Ausnahme "Nachricht"?

Nein, als Sören wies bereits.Jedoch Ihre Ausnahme geben könnte override ToString und vernünftig fügen Sie den response-Daten gibt.Dies ist eine vollkommen normale Praxis, gefolgt von vielen der exception-Typen in die BCL (Base Class Library), so dass Sie nicht finden, selbst gegen den Strom zu schwimmen.Zum Beispiel, haben Sie einen Blick auf die System.IO.FileNotFoundException.ToString Umsetzung in SSCLI (Rotor):

public override String ToString()
{
    String s = GetType().FullName + ": " + Message;

    if (_fileName != null && _fileName.Length != 0)
        s += Environment.NewLine + String.Format(Environment.GetResourceString("IO.FileName_Name"), _fileName);

    if (InnerException != null)
        s = s + " ---> " + InnerException.ToString();

    if (StackTrace != null)
        s += Environment.NewLine + StackTrace;

    try
    {
        if(FusionLog!=null)
        {
            if (s==null)
                s=" ";
            s+=Environment.NewLine;
            s+=Environment.NewLine;
            s+="Fusion log follows: ";
            s+=Environment.NewLine;
            s+=FusionLog;
        }
    }
    catch(SecurityException)
    {

    }
    return s;
}

Wie Sie sehen können, fügt es die Inhalte FusionLog Eigenschaft, die darstellen, extra Informationen im Falle von assembly laden-Fehler.

Wie bekomme ich Elmah aufzeichnen extra Informationen aus einem Feld in einer benutzerdefinierten Ausnahme

ELMAH speichert das Ergebnis des Aufrufs ToString auf eine Ausnahme, wie die details des Fehlers so wenn Sie haben ToString umgesetzt, wie vorgeschrieben, die Informationen protokolliert, ohne weitere Arbeit.Das einzige Problem ist, dass der angemeldete detail unstrukturierten text.

Die Exception-Klasse enthält ein Wörterbuch (mit dem Namen Data, glaube ich), dass Sie verwenden können, um verknüpfen benutzerdefinierten Daten mit Vanille Ausnahme.

Ich nicht verstehen die Frage, aber Sie scheinen zu Fragen, was zu tun mit Ausnahme der zusätzlichen Daten, wenn das nicht Ihre Frage fühlen Sie sich frei, dies zu ignorieren.

Ich denke, eine wichtige Frage ist, was genau ist die exception-Nachricht für?Es ist nicht zu wissen, wo die Ausnahme kam, den stack-trace ist;es ist nicht zu Kapseln, eine Ausnahme in eine mehr Allgemeine, das getan werden sollte, mit der InnerException-Feld;in dem Fall, wo die Ausnahme nur ausgelöst, von einer bestimmten Stelle im code ist es nicht einmal beschreiben, welche Art der Fehler, den Sie hatten - das ist, was der Typ der Ausnahme wird für.

In der Regel benutze ich das Feld Nachricht, um eine einfache, lesbare Tipps, dass ein Programmierer, der nicht mir, sehen Sie diese Fehlermeldung zum ersten mal verwenden können, um einen Einblick in das zugrunde liegende system.Ich halte das Feld Nachricht, um sein geeignet für einen kurzen (ein Satz) Erklärung, einen Hinweis auf, wie dieser Fehler ist Häufig erhöht, oder einen Verweis auf weitere Literatur.

Also, soweit ich Ihre Frage verstehe, denke ich, dass der beste Weg zu speichern Sie diese 'zusätzlichen Informationen', die von einem anderen system als InnerException.Ich weiß nicht, Elmah, aber ob es das Wert sein Salz wird es überprüfen für InnerExceptions und speichern Sie Sie.

Ich verstehe nicht die Frage-du bist erweitern Sie System.Ausnahme, und die, die Sie bereits Hinzugefügt die Elmah-Feld.Das ist, wo es gehört-als eine öffentliche Eigenschaft der Ausnahme selbst.

Elmah ist ein http-Modul, das Datensätze nicht behandelte Ausnahmen.

Ich denke, es ist nur eine Einschränkung von Elmah, da es nicht speichern benutzerdefinierter Felder.Ich denke, das werde ich haben zu bitten, diese Jungs.Ich habe das zusätzliche Feld für die Antwort-Daten, aber Elmah nicht speichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top