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

时间:2010-04-21 18:44:33

标签: asp.net field elmah

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

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

2 个答案:

答案 0 :(得分:2)

没有看到你的源代码我只能做出假设,但我认为Elmah会因为你得到一个例外而停止记录。这可能是因为Session属性为null。该会话仅在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 类,这将是相同的:错误对象包含我所有的会话变量,我可以将它们存储在数据库中我想要的方式。

答案 1 :(得分:0)

我没有使用它,但这是asked before and apparently there is a patch,你可能想尝试一下。

相关问题