Elmah: Ausnahmen ohne Httpcontext?
-
22-09-2019 - |
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
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):
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.