Je souhaite utiliser ELMAH pour consigner une exception (sans la lancer tout le long de la pile d'appels) et enregistrer la totalité de la pile d'appels.Comment enregistrer une exception avec une pile d'appels complète?
code Exemple:
protected void Page_Load(object sender, EventArgs e)
{
DoSomething();
}
private void DoSomething()
{
try { TrySomething(); }
catch (Exception ex) { LogException(ex); }
}
private void TrySomething()
{
throw new NotImplementedException();
}
public static void LogException(Exception ex)
{
var currentStack = new System.Diagnostics.StackTrace(true);
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}
Maintenant, dans la méthode LogException je peux voir la pile d'appel me disant DoSomething() appelé TrySomething(), et qui a jeté l'exception, mais je ne vois pas l'appel pile me montrant Page_Load() appelé DoSomething(). Je veux être en mesure de voir la pile d'appels complète.
Exemple de ce que ex.StackTrace ressemble à l'intérieur méthode LogException:
at WebApplication1._Default.TrySomething() in C:\Projects\test\GeneralTests\WebApplication1\Default.aspx.cs:line 26
at WebApplication1._Default.DoSomething() in C:\Projects\test\GeneralTests\WebApplication1\Default.aspx.cs:line 20
je peux obtenir la pile d'appel complet de System.Diagnostics.StackTrace(), par exemple:
at WebApplication1._Default.LogException(Exception ex)
at WebApplication1._Default.DoSomething()
at WebApplication1._Default.Page_Load(Object sender, EventArgs e)
[snip]
(et je peux obtenir les numéros de ligne et les détails du fichier source en parcourant chaque image de StackTrace)
Mais comment puis-je injecter ceci dans l'exception ou élever une nouvelle exception avec cette pile d'appels queue? Y a-t-il une manière élégante de faire ceci? Ai-je manqué quelque chose de vraiment évident ?!
Découvrez ces réponses sur des questions connexes qui permettent de mieux comprendre les raisons pour lesquelles vous ne recevez pas la pleine pile d'appel: http://stackoverflow.com/a/6094700/945456 et http://stackoverflow.com/a/24297684/945456 –