【问题标题】:Add a Session Variable or Custom field to the Elmah Error Log table将会话变量或自定义字段添加到 Elmah 错误日志表
【发布时间】:2010-04-21 18:44:32
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net field elmah


    【解决方案1】:

    没有看到您的源代码,我只能做出假设,但我认为 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 类都是相同的:错误对象包含我所有的会话变量,我可以以任何方式将它们存储在数据库中想要。

    【讨论】:

      【解决方案2】:

      我没用过,但这是asked before and apparently there is a patch,你可能想试试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多