Est-il possible de faire ce qui suit en utilisant ELMAH?
logger.Log(" something");
Je fais quelque chose comme ça:
try
{
// Code that might throw an exception
}
catch(Exception ex)
{
// I need to log error here...
}
Cette exception ne sera pas enregistrée automatiquement par ELMAH, car elle a été gérée.
Réponses:
Méthode d'écriture directe des journaux, fonctionnant depuis ELMAH 1.0:
ELMAH 1.2 introduit une API plus flexible:
Il y a une différence entre les deux solutions:
Raise
La méthode applique les règles de filtrage ELMAH à l'exception.Log
pas.Raise
est basé sur un abonnement et peut enregistrer une exception dans les différents enregistreurs.la source
Elmah.ErrorLog.Log()
: elle lève en cas d'échec de l'appel de journal, ce qui peut éventuellement entraîner la fermeture de l'ensemble de l'application Web.Raise()
échoue silencieusement. Par exemple: s'il y a un problème de mauvaise configuration côté serveur (par exemple, Elmah est configuré pour enregistrer les erreurs sur le disque, mais n'a pas l'accès correct au dossier logs), la.Log()
méthode lancera. (C'est bien pour le débogage, par exemple, pourquoi ne.Raise()
consigne-t-il rien?)Je recommanderais d'encapsuler l'appel à Elmah dans une simple classe wrapper.
Il suffit ensuite de l'appeler chaque fois que vous devez enregistrer une erreur.
Cela présente les avantages suivants:
Remarque: J'ai ajouté une propriété «contextualMessage» pour les informations contextuelles. Vous pouvez omettre cela si vous préférez mais je le trouve très utile. Elmah déballe automatiquement les exceptions afin que l'exception sous-jacente soit toujours signalée dans le journal mais le contextualMessage sera visible lorsque vous cliquez dessus.
la source
// uh oh! just keep going
. Si ma gestion des erreurs échoue, je veux savoir. Je veux que ça fasse du bruit.Vous pouvez utiliser la méthode Elmah.ErrorSignal () pour consigner un problème sans déclencher une exception.
la source
la source
Oui c'est possible. ELMAH a été conçu pour intercepter les exceptions non gérées. Cependant, vous pouvez signaler une exception à ELMAH via la classe ErrorSignal. Ces exceptions ne sont pas levées (ne bouillonnent pas), mais sont uniquement envoyées à ELMAH (et aux abonnés de l'événement Raise de la classe ErrorSignal).
Un petit exemple:
la source
Je cherchais à faire la même chose dans un thread que j'avais commencé à mettre en file d'attente du courrier à partir de mon application MVC4, en tant que tel, je n'avais pas le HttpContext disponible lorsqu'une exception était levée. Pour ce faire, je me suis retrouvé avec ce qui suit sur la base de cette question et une autre réponse trouvée ici: elmah: exceptions sans HttpContext?
Dans le fichier de configuration, j'ai spécifié un nom d'application:
Ensuite, dans le code (comme la réponse fournie ci-dessus, mais sans HttpContext), vous pouvez passer null au lieu d'un HttpContext:
la source
packages.config
apparence? Voyez-vous quelque chose comme<package id="elmah" version="1.2.2" targetFramework="net45" />
<package id="elmah.corelibrary" version="1.2.2" targetFramework="net45" />
<package id="elmah.sqlserver" version="1.2" targetFramework="net45" />'
:? Avez-vous installé avec NuGET?packages.config
Parfois, ils
CurrentHttpContext
peuvent ne pas être disponibles.Définir
Utilisation
la source
Je suis sur le noyau ASP.NET et j'utilise ElmahCore .
Pour enregistrer manuellement les erreurs avec HttpContext (dans le contrôleur), écrivez simplement:
Dans une autre partie de votre application sans HttpContext :
la source
J'essayais d'écrire des messages personnalisés dans les journaux Elmah en utilisant Signal.FromCurrentContext (). Raise (ex); et a constaté que ces exceptions se multiplient, par exemple:
De plus, je ne vois pas comment elmah prend en charge différents niveaux de journalisation - est-il possible de désactiver la journalisation détaillée par un paramètre web.config?
la source
Utilisé cette ligne et cela fonctionne parfaitement bien.
la source