2010-04-21 42 views
3

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

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

回答

2

没有看到您的源代码我只能做出假设,但我认为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字段。)

In我的测试按预期工作。我只在SqlErrorLog类中检查过,但是对于所有其他ErrorLog类都是相同的:错误对象包含我所有的会话变量,我可以以任何我想要的方式将它们存储在数据库中。

相关问题