我想将我自己的 session 变量添加到 elmah 错误日志表中并显示它。我已经修改了源代码并将新字段添加到 Error.cs 和其他字段中,但我不知道,但是当我将 HttpContext.Current.Session["MyVar"].tostring() 值分配给我的字段时构造函数停止记录异常并且不记录任何异常。
我只需要获取 session 变量的值还有其他方法吗?我读了一篇文章,他添加了电子邮件字段,但没有说明我到底应该在哪里获取 session 值。我还了解到 Elmah 默认记录 session 和 Cookie,但我不知道如何访问它们。感谢大家的帮助。
最佳答案
在没有看到你的源代码的情况下,我只能做出假设,但我认为 Elmah 停止记录是因为你遇到了异常。发生这种情况的原因可能是 Session
属性为 null。该 session 仅在 PostAcquireRequestState
事件发生后才可用,因此您不能指望此属性始终可用。
我自己尝试了一下,写了一个这样的方法:
private static Dictionary<string, object> CopySession(HttpSessionState session)
{
if (session == null || session.Count == 0)
return null;
Dictionary<string, object> copy = new Dictionary<string, object>(session.Count);
foreach (var key in session.Keys)
{
string name = key.ToString();
copy.Add(name, session[name]);
}
return copy;
}
我在 Error 类的构造函数中调用此方法,如下所示:
// _session is a new field that I added like this:
// private Dictionary<string, object> _session;
_session = CopySession(context.Session);
(就在复制服务器变量和其他上下文内容之后。您可能还需要更改 IClonable
实现来复制 _session
字段。)
在我的测试中,这按预期工作。我只检查了 SqlErrorLog
类,但这对于所有其他 ErrorLog 类都是相同的:错误对象包含我的所有 session 变量,我可以将它们存储在以我想要的任何方式数据库。
关于asp.net - 将 session 变量或自定义字段添加到 Elmah 错误日志表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2685657/