asp.net - 将 session 变量或自定义字段添加到 Elmah 错误日志表

标签 asp.net field elmah

我想将我自己的 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/

相关文章:

bash - 使用 awk 将大型复杂的一列文件拆分为多列

c# - ELMAH 正在寻找有关虚拟导演的二进制文件

ELMAH:Elmah 页面未设计样式,使其难以阅读

javascript - SPA - Firebase 和 .Net WebApi 2 身份验证

c# - 如何在 ASP.NET 环境中使用控制台输出?

css - 使用 CSS 在 Drupal 7 中排列字段显示

elmah - 手动记录的 ELMAH 错误不发送电子邮件

c# - 为什么在将对象转换为整数时会出现 InvalidCastException?

javascript - Ajax 调用工作很慢。可以让它更快吗?

java - Java Spring中的实例之间是否可以不共享静态字段?