c# - elmah: excepciones sin HttpContext?
asp.net exception (4)
Asegúrate de configurar el nombre de tu aplicación en web.config
<errorLog type="Elmah.SqlErrorLog, Elmah"
connectionStringName="nibWeb"
applicationName="Nib.Services" />
y entonces
ErrorLog.GetDefault(null).Log(new Error(error));
trabajará
Genero un hilo en Application_Start y me gustaría registrar excepciones. No hay Context/HttpContext/HttpContext.Current
, entonces, ¿cómo podría lograr que se registre?
Por el momento, no capta ninguna excepción en mis hilos y si escribo ErrorSignal.FromCurrentContext().Raise(ex);
Me sale un error sobre el contexto no puede ser nulo.
Tal vez pueda crear un HttpContext ficticio, pero de alguna manera no creo que funcione bien.
-edit- Probé ErrorSignal.Get(new HttpApplication()).Raise(ex);
y no parece recoger esa excepción.
No estaba usando <errorLog>
como en la respuesta de Brendan Carey porque solo estaba registrando en memoria. Sin embargo, su comando funcionó muy bien en mi caso sin nombrar la aplicación:
Elmah.ErrorLog.GetDefault(null).Log(new Elmah.Error(new Exception("The application has done something.")));
Tuve que recompilar Elmah con .NET 4.0, debido a un error sobre necesitar System.Web.Abstractions 3.5.0.0. Mi fork compiled-for-.NET 4.0 está aquí si alguien lo quiere (también fuerte denominación):
Para mi aplicación, this.Context.ApplicationInstance
en Application_Start
para poder llamar a Elmah.ErrorSignal.Get
con la instancia guardada. Con ErrorSignal
, podría ErrorSignal
. Esto pasa por todos los filtros de correo electrónico.
A continuación está el código. Yo uso FluentScheduler para
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);
}
}
Agregué una solución para: Usar ELMAH en una aplicación de consola que agrega la capacidad de enviar correos electrónicos, tweets y filtros además del registro.