2010-09-28 5 views
11

Ich bin ein wenig verwirrt darüber, wie eine Nachricht zu einem Fehler hinzugefügt wird programmatisch mit ELMAH protokolliert.Elmah Nachricht hinzufügen zu Fehler protokolliert durch Aufruf an Raise (e)

zB:

public ActionResult DoSomething(int id) 
{ 
    try { ... } 

    catch (Exception e) 
    { 
     // I want to include the 'id' param value here, and maybe some 
     // other stuff, but how? 
     ErrorSignal.FromCurrentContext().Raise(e); 
    } 
} 

Es scheint alles Elmah kann tun, um die rohe Ausnahme ist einzuloggen, wie kann ich auch meine eigenen Debug-Informationen anmelden?

+1

neugierig, warum Elmah für zusätzliche Nachrichten für Raise keine Überladung hat. Kontextinformationen sind wichtig, wenn Sie versuchen, bestimmte Fehler zu beheben –

Antwort

17

Sie können eine neue Exception werfen das Original als die innere Ausnahme Einstellung und ELMAH die Nachrichten für beide log:

catch(Exception e) 
{ 
    Exception ex = new Exception("ID = 1", e); 
    ErrorSignal.FromCurrentContext().Raise(ex); 
} 

System.Exception: ID = 1 ---> System.NullReferenceException: Object reference not set to an instance of an object. 
+0

nette Idee, danke – fearofawhackplanet

+0

funktioniert super! Vielen Dank! –

+0

sollten Sie Exception.Data verwenden, aber standardmäßig hat elmah diese Funktionalität nicht. Ich habe eine benutzerdefinierte Version hinzugefügt, die ich verwende. Ich sollte den Code wirklich irgendwo veröffentlichen. Ich weiß, das ist alt, aber ich denke, das ist nicht 100% richtig. Ja, Sie können dies für kleine Details verwenden, aber wenn Sie eine Liste von Daten wünschen, für die das Exception.Data erstellt wurde. Wenn beispielsweise eine SQLException ausgelöst wird, erhalten Sie viele Details. Ich habe das auch hinzugefügt. Es ist nicht wirklich schwer, sich selbst zu tun. Auch beim Arbeiten mit linq2sql können Sie viele Details erhalten. – pqsk

3

fand ich zeigen, dass ich auch etwas tun kann wie:

Elmah.ErrorSignal.FromCurrentContext().Raise(new NotImplementedException("class  FbCallback.Page_Load() Request.Url= " + Request.Url)); 

Um meine eigenen Nachrichten zu protokollieren. Dann in wenn ich zu

http://localhost:5050/elmah.axd 

Ich sehe meine Nachrichten als Typ NotImplementedException. Nicht sehr hübsch, aber funktioniert.

Verwandte Themen