Question

Je Spawn un fil sur Application_Start et je souhaite me connecter des exceptions. Il n'y a pas Context/HttpContext/HttpContext.Current, alors comment pourrais-je obtenir de se connecter?

À l'heure actuelle, il ne capture aucune exception dans mes fils et si j'écris ErrorSignal.FromCurrentContext().Raise(ex); je reçois une erreur sur le contexte ne peut pas être nulle.

Je pourrais peut-être créer un mannequin HttpContext mais de toute façon, je ne pense pas que cela va bien fonctionner.

-edit -. J'ai essayé ErrorSignal.Get(new HttpApplication()).Raise(ex); et il ne semble pas prendre cette exception

Était-ce utile?

La solution

Assurez-vous que vous définissez votre nom d'application dans web.config

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

et

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

fonctionnera

Autres conseils

Je n'utilisais pas <errorLog> comme dans la réponse de Brendan Carey parce que j'étais seulement en mémoire l'exploitation forestière. Néanmoins, son commandement fonctionnait très bien dans mon cas sans nommer l'application:

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

Je dois recompiler AI Elmah avec .NET 4.0, en raison d'une erreur au sujet de besoin System.Web.Abstractions 3.5.0.0. Mon compiled-for-.NET 4.0 fourchette est ici si quelqu'un veut (nommer aussi forte):

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

Pour ma demande, j'ai sauvé this.Context.ApplicationInstance dans Application_Start afin que je puisse appeler Elmah.ErrorSignal.Get avec l'instance enregistrée. Avec le ErrorSignal, je pourrais alors Raise. Cela passe par tous les filtres de courrier électronique.

Voici le code. J'utilise FluentScheduler à

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

    }
}

J'ai ajouté une solution à: Utilisation de ELMAH dans une application console ajoute la capacité d'envoyer des e-mails, tweets et filtre en plus de l'exploitation forestière.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top