42 votes

elmah: exceptions sans HttpContext?

Je frayer un thread sur Application_Start et que vous souhaitez vous connecter exceptions. Il n'y a pas d' Context/HttpContext/HttpContext.Current, alors comment pourrais-je l'obtenir pour vous connecter?

Pour le moment, on n'attrape pas toute exception à mon fils et si j'écris ErrorSignal.FromCurrentContext().Raise(ex); j'obtiens une erreur sur le contexte ne peut pas être null.

Je peux peut-être créer un mannequin HttpContext mais de toute façon je ne pense pas que qui va bien travailler.

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

73voto

Brendan Carey Points 516

Assurez-vous de définir votre nom de l'application web.config

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

et puis

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

va travailler

2voto

Scott Stafford Points 13161

Je n'étais pas à l'aide de <errorLog> comme Brendan Carey répondre parce que je n'ai en mémoire l'enregistrement. Néanmoins, son commandement a très bien fonctionné dans mon cas, sans nommer l'application:

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

Je N'ai recompiler Elmah avec .NET 4.0, en raison d'une erreur à propos d'avoir besoin du Système.Web.Abstractions 3.5.0.0. Mon compiled-for-.NET 4.0 fourche est ici si quelqu'un veut (c'est aussi fort de nommage):

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

1voto

John Tseng Points 3782

Pour mon application, j'ai sauvé this.Context.ApplicationInstance en Application_Start alors que je peux appeler Elmah.ErrorSignal.Get avec le même exemple. Avec l' ErrorSignal,, j'ai pu alors Raise. Cela va à travers tous les filtres de courriel.

Ci-dessous est 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);

    }
}

0voto

Brian Chance Points 801

J'ai ajouté une solution de: http://stackoverflow.com/questions/841451/using-elmah-in-a-console-application qui ajoute de la capacité à envoyer des emails, tweets et filtre en plus de l'enregistrement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X