将会话变量或自定义字段添加到 Elmah 错误日志表

2024-02-11

我想将我自己的会话变量添加到 elmah 错误日志表并显示它。我已经修改了源代码并将新字段添加到 Error.cs 和其他字段中,但我不知道,但是当我将 HttpContext.Current.Session["MyVar"].tostring() 值分配给我的字段时构造函数它会停止记录异常并且不记录任何异常。

我只需要获取会话变量的值还有其他方法吗?我读了一篇文章,他添加了电子邮件字段,但没有说明我到底应该在哪里获取会话值。我还读到 Elmah 默认记录会话和 Cookie,但我不知道如何访问它们。感谢大家的帮助。


如果没有看到你的源代码,我只能做出假设,但我认为 Elmah 停止记录是因为你遇到了异常。这可能会发生,因为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类:错误对象包含我所有的会话变量,我可以按照我想要的任何方式将它们存储在数据库中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将会话变量或自定义字段添加到 Elmah 错误日志表 的相关文章

随机推荐