ELMAH: exceptions sans HttpContext?
-
22-09-2019 - |
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
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):
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.