Domanda

I Spawn un thread su Application_Start e desidero accedere eccezioni. Non v'è alcun Context/HttpContext/HttpContext.Current, quindi come potrei farlo per accedere?

Al momento, non cattura alcuna eccezione nelle mie discussioni e se scrivo ErrorSignal.FromCurrentContext().Raise(ex); ottengo un errore sul contesto non può essere nullo.

Forse posso creare un manichino HttpContext ma in qualche modo non credo che funziona bene.

-edit -. ho provato ErrorSignal.Get(new HttpApplication()).Raise(ex); e non sembra per raccogliere tale eccezione

È stato utile?

Soluzione

Assicurati di impostare il nome dell'applicazione in web.config

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

e quindi

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

funzionerà

Altri suggerimenti

non stavo usando <errorLog> come nella risposta di Brendan Carey perché ero solo la registrazione in memoria. Tuttavia, il suo comando ha lavorato molto nel mio caso senza nominare l'applicazione:

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

ho dovuto ricompilare Elmah con .NET 4.0, a causa di un errore di circa avere bisogno System.Web.Abstractions 3.5.0.0. Il mio compiled-for-.NET 4.0 forcella è qui, se qualcuno lo vuole (anche forte di denominazione):

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

Per la mia domanda, ho salvato this.Context.ApplicationInstance in Application_Start modo che io possa chiamare Elmah.ErrorSignal.Get con l'istanza salvato. Con la ErrorSignal, ho potuto quindi Raise. Questo passa attraverso tutti i filtri di posta elettronica.

Di seguito è riportato il codice. Io uso FluentScheduler a

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);

    }
}

Ho aggiunto una soluzione per: Utilizzando ELMAH in un'applicazione console che aggiunge possibilità di inviare e-mail, tweet e il filtro, oltre a registrazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top