Comment obtenir ELMAH d'inclure des valeurs de session?
-
21-09-2019 - |
Question
NOTE: Je sais que les diverses raisons pour éviter d'utiliser la session, mais c'est un projet que j'ai hérité, donc s'il vous plaît sauter cette partie de réponses:)
Comme il est un problème résolu, j'espère que quelqu'un peut pointer vers une pièce ELMAH / branche / fourche qui comprend l'enregistrement des données de session plutôt que de réinventer la roue.
Une chose bizarre est un ancien poste de Atif qui dit qu'ils sont déjà enregistrés:
http://markmail.org/message/ncmdgwm5rmzewbwu
henningst de commentateur a mentionné l'ajout des variables de session ici:
http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx
Une autre approche (je préfère éviter) est de copier les valeurs dans les cookies
Je sais une alternative est de passer à quelque chose en plus ELMAH (comme Exceptioneer - voir http: // exceptioneer. com / public / ExceptioneerAndELMAH.aspx ) mais étant donné que c'est mon seul problème avec ELMAH au moment, je préfère avoir juste un ELMAH patché que de passer à autre chose.
La solution
Atif a répondu sur twitter à dire qu'il n'y a pas de patch connu:
http://twitter.com/raboof/statuses/7229453423
Je créé un patch qui le fait:
http://twitter.com/manningj/statuses/7231616905
http: // Blog .sublogic.com / 2009/12 / patch-à-enable-session-logging avec variable ELMAH /
Autres conseils
Au lieu de patcher Elmah, je l'ai fait avec des données d'exception. Dans Global.asax J'ai inséré les données supplémentaires à l'exception sur Application_Error (). « HistoryStack » est ma propre classe pour l'enregistrement historique de l'utilisateur, y compris et bouton onglet clics:
void Application_Error(object sender, EventArgs e)
{
Exception ex = Server.GetLastError().GetBaseException();
var stack = HistoryStack.Dump(); // essentially grabs data from the session
ex.Data.Add("historyStack", stack);
}
Ensuite, dans ErrorMail_Mailing () Je saisis les données en arrière et raccordé dans l'e-mail:
void ErrorMail_Mailing(object sender, Elmah.ErrorMailEventArgs e)
{
var stack = e.Error.Exception.Data["historyStack"] as Stack<string>;
if (stack == null && e.Error.Exception.InnerException != null)
{
// could probably skip the first try and go straight to this assignment:
stack = e.Error.Exception.InnerException.Data["historyStack"] as Stack<string>;
}
if (stack != null && stack.Count > 0)
{
e.Mail.Body = e.Mail.Body + "<h1>Browsing History</h1>" + System.Environment.NewLine;
while (stack.Count > 0)
{
e.Mail.Body = e.Mail.Body + stack.Pop() + "<br />" + System.Environment.NewLine;
}
}
}
Maintenant ces données sont ajoutées au bas de l'e-mail. Aucun patch ou extensions nécessaires.