错误如何分组

Error Reporting 会将根本原因相同的错误分组在一起。

分组前

Error Reporting 首先会确定以下事项,然后再对错误进行评估以便对其分组:

  • 在 App Engine 标准环境中,忽略严重性标记为低于 ERROR 的错误。
  • 不归用户所有的堆栈帧(例如,属于公共库的堆栈帧)已被忽略。
  • 将一个或多个堆栈帧的所有重复序列替换为该序列的单个匹配项。
  • 移除编译器引入的方法和符号。

分组

系统评估错误时遵循以下常规模式:

  • 将类型相同且堆栈类似的异常分在同一组。
  • 对于通常与发生异常的源位置无关的异常,忽略堆栈轨迹。
  • 如果多个没有异常堆栈的错误是由同一条日志语句创建的,并且最初报告错误的位置 (reportLocation) 近似,则这些错误会分入同一组。

具体而言,以下分组规则会按照如下顺序应用:

错误类型 分组依据
由环境中的一般问题引发的错误

例如,特定于 App Engine 的问题:


com.google.apphosting.runtime.HardDeadlineExceededError

com.google.appengine.api.datastore.DatastoreTimeoutException

Java 问题:


java.util.concurrent.CancellationException
按异常类型分组。
堆栈轨迹错误。如果是嵌套异常,则考虑最内层的异常。

例如:


runtime error: index out of range
package1.func1()
      file1:20
package2.func2()
      file2:33
按异常类型和 5 个最顶层的帧分组。
没有堆栈轨迹但带有消息的错误。

例如:


runtime error: index out of range
    func1()
按消息和函数名称(如果有)分组。仅考虑消息的前 3 个字面量标记。在左侧的示例中,这些标记分别为 runtimeerrorindex