Frage

Ich Laichen einen Thread auf Application_Start und möchten Ausnahmen protokollieren. Es gibt keine Context/HttpContext/HttpContext.Current, so wie könnte ich es bekommen anmelden?

Im Moment spielt es keine Ausnahme in meinen Fäden fängt und wenn ich ErrorSignal.FromCurrentContext().Raise(ex); schreibe ich einen Fehler über Kontext erhalte nicht null sein kann.

Vielleicht kann ich ein Dummy-Httpcontext, aber irgendwie glaube ich, nicht so gut funktionieren wird.

-edit - Ich habe versucht ErrorSignal.Get(new HttpApplication()).Raise(ex); und es scheint nicht, dass die Ausnahme aufzuheben

.
War es hilfreich?

Lösung

Stellen Sie sicher, Sie setzen Ihre Anwendungsnamen in web.config

<errorLog type="Elmah.SqlErrorLog, Elmah" 
          connectionStringName="nibWeb" 
          applicationName="Nib.Services" />

und dann

ErrorLog.GetDefault(null).Log(new Error(error));

funktioniert

Andere Tipps

Ich war mit nicht <errorLog> wie in Brendan Carey Antwort, weil ich nur im Speicher Protokollierung war. Dennoch sein Kommando in meinem Fall hat gut funktioniert, ohne die Anwendung zu benennen:

Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("The application has done something.")));

Ich habe Elmah mit .NET 4.0 neu kompiliert werden, aufgrund eines Fehlers über System.Web.Abstractions 3.5.0.0 benötigen. My compiled-for-.NET 4.0 Gabel ist hier, wenn jemand will es (auch starke Namensgebung):

http://code.google.com/r/scottstafford-elmah/

Für meine Anwendung, sparte ich this.Context.ApplicationInstance in Application_Start so dass ich Elmah.ErrorSignal.Get mit der gespeicherten Instanz aufrufen können. Mit dem ErrorSignal, konnte ich dann Raise. Das geht durch alle E-Mail-Filter.

Im Folgenden finden Sie den Code ein. Ich benutze FluentScheduler zu

public class Global : HttpApplication {
    void Application_Start(object sender, EventArgs e) {

        var application = Context.ApplicationInstance;
        FluentScheduler.TaskManager.UnobservedTaskException +=
            (FluentScheduler.Model.TaskExceptionInformation i, UnhandledExceptionEventArgs a) =>
                Elmah.ErrorSignal.Get(application).Raise(i.Task.Exception);

    }
}

Ich habe eine Lösung an: Mit ELMAH in einer Konsolenanwendung dass fügt Fähigkeit, E-Mails, Tweets und Filter zusätzlich zur Protokollierung zu senden.

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