2008-11-12 77 views
1

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

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

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

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

回答

1

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

2

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

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

HTH!

0

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

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

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