Frage

Bei der Verwendung von ELMAH (die brillant ist) ist es möglich, zusätzliche Informationen anzuzeigen, die Sie eine Ausnahme hinzugefügt haben.

z.

Exception ex = new Exception("New exception to use ErrorSignal functionality");
ex.Data.Add("ExtraInfo", "Here is some extra information i would like to be displayed.");
ErrorSignal.FromCurrentContext().Raise(ex);    

Wenn ich sehe, die Ausnahme von elmah.axd es scheint nicht zu den „Extrainfo“ Schlüssel und Wertinformationen zu zeigen, nur die Ausnahme String.

War es hilfreich?

Lösung

Nein, es ist nicht möglich, die zusätzliche Informationen mit den aktuellen 1.x Versionen anzuzeigen.

Andere Tipps

war meine Lösung der Informationen an die Server-Variablen Sammlung hinzuzufügen, wie so.

var context = HttpContext.Current;
context.Request.ServerVariables["ERROR_CALLING_WEBSERVICE_URI"] = uri;
Elmah.ErrorLog.GetDefault(context).Log(new Error(e, context))

Ja, ich denke, das ist ein Hack.
Für kleine Mengen von zusätzlichen Daten betrachten Einkapseln der Fehler, wie durch @Roma
vorgeschlagen Jedoch ist diese Methode besonders nützlich ist, wenn Sie zu viel Information setzen in eine ‚gekapselte Fehlermeldung‘

Der einfache Weg, um zu gehen, ist es, den Fehler zu verkapseln. Der äußere Fehler Sie benutzerdefinierte Nachricht enthalten.

string msg = "my custom error message";

ErrorSignal.FromCurrentContext().Raise(
               new Elmah.ApplicationException(msg,ex));

Ok, so habe ich darauf gewartet, diese jetzt zu lang aufgenommen werden und beschlossen, eine eigene Gabel daraus zu machen und auch die Funktion selbst.

Sie können es hier finden: https://github.com/boena/elmah- mit-custom-Daten

Elmah verwendet ToString () -Methode Ausnahme Details zu erhalten. außer Kraft setzen Sie einfach Ihre benutzerdefinierte Ausnahme ToString () Methode und auf diese Weise wird es funktionieren:

Probe Ausnahme in Elmah

Meine Ausnahmeklasse:

public class MyCustomException : Exception
{
    public string CustomProperty { get; set; }

    public MyCustomException(string message, string customProperty): base(message)
    {
        this.CustomProperty = customProperty;
    }

    public override string ToString()
    {
        var result = base.ToString();
        var propertyData = String.Format("CustomProperty: {0}", this.CustomProperty);

        return result.Insert(
            result.IndexOf(Environment.NewLine),
            Environment.NewLine + propertyData
            );
    }
}

Nun, den Tag verbracht hat daran gearbeitet, ich dachte, dass ich meine Lösung teilen würde. Sehr ähnlich oben Myster-Lösung, wobei der Unterschied darin ich das Fehlerobjekt durch Elmah anstelle der Anforderungsserver verwendeten Variablen ändern, etwa so:

    public static void LogError(Exception e, IDictionary<string, string> customFields = null)
    {
        var logger = ErrorLog.GetDefault(HttpContext.Current);

        customFields = customFields ?? new Dictionary<string, string>();

        // Used to tell elmah not to log this twice (See global.asax)
        e.Data.Add("Logged", true);

        var error = new Error(e, HttpContext.Current);

        customFields.ForEach(pair => error.ServerVariables.Add(pair.Key, pair.Value));

        logger.Log(error);
    }

Dann je nach Anwendung logger.LogError zu nennen:

mvc einen benutzerdefinierten Fehler Filter hinzufügen ( http : //maheshde.blogspot.ca/2012/09/error-handing-with-mvc-using-custom.html )

webforms außer Kraft setzen Application_Error in global.asax

Dann nur noch eine letzte Schritt in der global.asax, entlassen alle Fehler, die bereits protokolliert wurden:

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
    if (e.Exception.Data.Contains("Logged"))
    {
        if (e.Exception.Data["Logged"].Equals(true)) e.Dismiss();
    }
}

Da es Open Source ist, könnten Sie einfach das Projekt packen und Elmah für Ihre eigenen Zwecke anpassen:

http://code.google.com/p/elmah/

Wenn Sie mit MSSQL

  • einen Blick auf SqlErrorLog.cs nehmen

  • SQLServer.sql Ihre eigene Datenbank generieren

Ich mache die gleichen, aber ich brauche eine zusätzliche zufällig generierten „Fehlercode“ Spalt hinzufügen und ich werde Ausnahmedaten werden mit alle, der Gewohnheit zu verfolgen, Sitzung, Form, Cookie-Informationen, die normalerweise in der sein würden, Über große xML-Feld. Ich kann dies zu JSON ändern, noch nicht sicher.

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