我开发了一个“概念验证”应用程序,它将未处理的异常从应用程序记录到错误跟踪系统(在本例中为Team Foundation Server,但它可能是任何错误跟踪系统)。这个想法的一个局限是我不想在每次抛出相同的异常时打开重复的Bug项目(例如,许多用户遇到异常 - 它仍然只是一个“bug”)。
我的第一次尝试是将异常类型,消息和堆栈跟踪存储为错误跟踪系统中的字段。然后,日志记录组件将对错误“存储”进行查询,以查看是否存在相同的错误信息。 (这个例子是.NET - 但我认为这个概念是平台独立的)。
问题显然是这些字段可能非常大(特别是堆栈跟踪) - 并且需要“全文”类型的实现来存储它们并且搜索非常昂贵。
我想知道为这个问题定义了哪些方法。我曾听说FogBugz有自动错误跟踪这样的功能,并且很好奇它是如何实现的。
答案 0 :(得分:2)
如果您有堆栈跟踪,则可以在堆栈跟踪中找到最后一条语句,并将其与已记录的语句进行比较。如果包含符号,您还可以获得行号。所以,现在你有两件事要比较,实际的错误号和失败的语句,可能还有实际的行号。如果已经记录了所有这些内容,那么很可能(当然不是100%)同样的问题。
实际上,您可能会使用“at”字来解析堆栈跟踪,因为堆栈跟踪中的每一行都以“at”开头。因此,查找最后一个“at”,获取该行,将其与存储的堆栈跟踪的最后一个“at”行进行比较,您可能实际上有一些东西。
HTH!
答案 1 :(得分:1)
您可以创建堆栈跟踪的校验和哈希,并将其存储为索引列。这样,对Bug Store的查询将非常快,以避免重复插入。
答案 2 :(得分:0)
您可以查看一个聚合异常的现有开源解决方案的源代码。
例如:https://github.com/getsentry/sentry/tree/master/src/sentry
这不是一个简单的问题,并且存在复杂的启发式方法(例如,在不同浏览器上报告不同方式的相同异常,例如,浏览器扩展导致的异常很常见,并且很少重要)。