2

除了通知用户之外,我们还希望收集信息用于调试目的。我们的系统是一个只有大约 1400 名客户的小众系统,因此我们的资金并不如我们希望的那样充足,因此错误比我们希望的更常见。我们目前有一个窗口,以较大的字体显示错误消息的第一行,黄色背景以吸引用户的眼球,其下方的文本框中带有灰色背景的可怕部分。还有一个按钮可以将所有内容放在复制缓冲区中以发送给客户支持。我们试图访问的消息由 exception.Message、堆栈跟踪的最后五个部分以及导致错误的方法的名称 (Reflection.MethodBase) 组成。我们计划增加用户说出他当时在做什么的能力,可能还有一个单选按钮,指示这种情况发生的频率,并将其写入日志文件。我们还应该包括哪些其他有用的信息?

我们也在考虑通过电子邮件将其发送给客户支持,但如果电子邮件失败,我们不会强调。电子邮件还有其他注意事项 - 客户支持可能会淹没其中,用户可能会反对,因为我们也会发送系统信息等。

我在 SO 上发现了两个类似的问题,但它们并没有真正关注我感兴趣的内容。错误消息文本 - 最佳实践处理如何为用户制作有用的消息,处理错误消息的最佳方法处理哪里保留错误 ID 与错误文本。我对调试更感兴趣(因为不幸的是我们的系统确实有很多错误)。

4

3 回答 3

1

如果您最终包含自动电子邮件提交,请将它们发送到新邮箱,以便您可以过滤它们并路由它们,而不会干扰现有的客户支持人员。

除此之外,包括以下内容可能很有用:

  • 如果您有多个版本的产品浮动,则错误消息中的软件版本号。
  • UTC 日期/时间
  • 操作系统/浏览器/环境/等。(任何相关的)
  • 用户的安全角色、登录等。
  • 跟进用户的联系信息(电话、电子邮件等)
  • 错误屏幕上的您的联系信息
于 2008-11-18T18:14:53.403 回答
1

我们使用以下方法获取系统指标。我们还记录用户/机器数据和堆栈。

string _osSql = @"SELECT * FROM Win32_OperatingSystem";
string _metric = string.Format("Metric Data:{0}", Environment.NewLine);

foreach (Screen _screen in Screen.AllScreens)
{
    if (_screen.Primary == true)
    {
        _metric += "Primary";
    }

    _metric += string.Format("Screen: Width:={0}, Height:={1}{2}", Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Environment.NewLine);
}

ManagementObjectSearcher _mgmt = new ManagementObjectSearcher(_osSql);

foreach (ManagementObject _o in _mgmt.Get())
{
    _metric += string.Format("OS:={0} - {1}{2}", _o.Properties["Caption"].Value.ToString(), _o.Properties["CSDVersion"].Value.ToString(), Environment.NewLine);
    _metric += string.Format("Memory  Total:={0}, Available:={1}{2}", _o.Properties["TotalVisibleMemorySize"].Value.ToString(), _o.Properties["FreePhysicalMemory"].Value.ToString(), Environment.NewLine);
    _metric += string.Format("Description:={0}{1}", _o.Properties["Description"].Value.ToString(), Environment.NewLine);
    _metric += string.Format("TotalVisibleMemorySize:={0}{1}", _o.Properties["TotalVisibleMemorySize"].Value.ToString(), Environment.NewLine);
    _metric += string.Format("FreePhysicalMemory:={0}{1}", _o.Properties["FreePhysicalMemory"].Value.ToString(), Environment.NewLine);
}
于 2008-11-18T20:22:17.733 回答
1

我记录用户的输入(针对每个请求)、应用程序的当前状态(从本地变量到抛出代码)、错误消息和简短的堆栈跟踪(针对意外错误)。但是,出于安全原因,我只发送“客户友好”(公司批准)错误消息,其中包括一些纠正建议、联系信息和错误 ID(详细日志条目的 UUID)。

于 2008-11-18T22:08:38.297 回答