1

我开发了一个“概念证明”应用程序,它将应用程序中未处理的异常记录到错误跟踪系统(在本例中为 Team Foundation Server,但它可以是任何错误跟踪系统)。这个想法的一个限制是我不希望每次抛出相同的异常时都打开重复的错误项(例如,许多用户遇到异常 - 它仍然是一个“错误”)。

我的第一次尝试是将异常类型、消息和堆栈跟踪作为字段存储在错误跟踪系统中。然后,日志记录组件将对错误“存储”进行查询,以查看是否存在具有相同信息的打开错误。(这个例子是.NET - 但我认为这个概念是平台独立的)。

问题显然是这些字段可能非常大(尤其是堆栈跟踪) - 并且需要“全文”类型的实现来存储它们并且搜索非常昂贵。

我想知道为这个问题定义了哪些方法。例如,我听说 FogBugz 有这样一个自动错误跟踪功能,我很好奇它是如何实现的。

4

3 回答 3

2

如果您有堆栈跟踪,您可以在堆栈跟踪中找到最后一条语句并将其与已记录的语句进行比较。如果包含符号,您还将获得行号。所以,现在你有两件事要比较,实际的错误号和失败的语句,可能还有实际的行号。如果已经记录了所有这些内容,那么很可能(当然不是 100%)是同一个问题。

事实上,您可以使用“at”字样解析堆栈跟踪,因为堆栈跟踪中的每一行都以“at”开头。因此,查找最后一个“at”,获取该行,将其与存储的堆栈跟踪的最后一个“at”行进行比较,您可能实际上有一些东西。

于 2008-11-13T01:21:08.543 回答
1

您可以创建堆栈跟踪的校验和哈希并将其存储为索引列。这样,对 Bug Store 的查询将非常快,以避免插入时出现重复。

于 2008-11-13T01:13:42.957 回答
0

您可以查看聚合异常的现有开源解决方案之一的源代码。

例如:https ://github.com/getsentry/sentry/tree/master/src/sentry

这不是一个简单的问题,并且有复杂的启发式方法(例如,相同的异常在不同的浏览器上以不同的方式报告,例如由浏览器扩展引起的异常很常见但很少重要)。

于 2014-05-27T22:08:49.250 回答