设置 Stackdriver Logging 中的错误数据格式

记录 App EngineCompute EngineGoogle Kubernetes Engine 提供的错误数据时,唯一的要求是日志条目要包含完整的错误消息和堆栈轨迹。应将错误数据记录为多行 textPayload,或者记录在 jsonPayloadmessage 字段中;如需了解详情,请参阅 LogEntry 参考。请注意,您还必须按照适用于您的语言和平台的设置说明进行操作。

使用 Stackdriver Logging 发送错误数据时,错误数据必须遵循以下 JSON 结构:

JSON 表示形式

{
  "eventTime": string,
  "serviceContext": {
    "service": string,     // Required.
    "version": string
  },
  "message": string,       // Required. Should contain the full exception
                           // message, including the stack trace.
  "context": {
    "httpRequest": {
      "method": string,
      "url": string,
      "userAgent": string,
      "referrer": string,
      "responseStatusCode": number,
      "remoteIp": string
    },
    "user": string,
    "reportLocation": {    // Required if no stack trace in 'message'.
      "filePath": string,
      "lineNumber": number,
      "functionName": string
    }
  }
}

示例

如果将以下负载发送到 Stackdriver Error Reporting API 或记录在 LogEntry.jsonPayload 中,则 Error Reporting 将正确处理这些负载:

带有包含堆栈轨迹的 message 的负载:

{
  "serviceContext": {
    "service": "frontend",
    "version": "bf6b5b09b9d3da92c7bf964ab1664fe751104517"
  },
  "message": "com.example.shop.Template$CartDiv retrieveCart: Error\njava.lang.IndexOutOfBoundsException: Index: 4, Size: 4\n\tat java.util.ArrayList.rangeCheck(ArrayList.java:635)\n\tat java.util.ArrayList.get(ArrayList.java:411)\n\tat com.example.shop.Cart.retrieve(Cart.java:76)\n\tat com.example.shop.Cart.generate(Cart.java:55)\n\tat com.example.shop.Template$CartDiv.retrieveCart(Template.java:113)\n\tat com.example.shop.Template.generate(Template.java:22)\n\tat com.example.shop.CartServlet.doGet(CartServlet.java:115)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:717)\n",
  "context": {
    "httpRequest": {
      "method": "GET",
      "url": "http://example.com/shop/cart",
      "responseStatusCode": 500
    },
    "user": "9f32f587135aa6774e78ed30fbaabcce3ec5528f"
  }
}

带有不包含堆栈轨迹的 message 的负载,需要 reportLocation

{
  "serviceContext": {"service": "worker"},
  "message": "Cannot process job: Missing attribute 'userId'",
  "context": {
    "reportLocation": {
      "filePath": "cleanup.js",
      "lineNumber": 42,
      "functionName": "processJob"
    }
  }
}

“支持和问题排查”页面上查找更多问题排查命令。

字段

字段名称 类型 说明 备注
eventTime string

错误报告中提供的事件发生时间。如果报告不包含时间戳,则使用 Error Reporting 系统收到错误的时间。

此时间戳采用 RFC 3339 世界协调时间 (UTC)(即“祖鲁时”)格式,且精确到纳秒。例如:"2014-10-02T15:01:23.045123456Z"

可选
serviceContext object 报告了此错误的服务上下文。 必填
serviceContext.service string

服务的标识符,例如可执行文件、作业的名称或 Google App Engine 服务名称。与可以在部署新代码时随时进行更改的 version 相反,该字段的值数量较少,在一段时间内相对稳定。

必填
serviceContext.version string 表示开发者提供的源代码版本,例如,可以表示版本标签或 Git SHA-1 哈希。如果开发者未提供版本,则该值将设置为 default。对于 App Engine 标准环境,版本可设置为应用的版本。 可选
message string 错误消息。
如果没有提供“context.reportLocation”,则消息必须包含标头(通常由异常类型名称和错误消息组成)以及采用支持的编程语言和格式的异常堆栈轨迹。
支持的语言包括 Java、Python、JavaScript、Ruby、C#、PHP 和 Go。
支持的堆栈轨迹格式:
必填
context object 有关发生错误的上下文的数据。 可选
context.httpRequest object 触发错误时处理的 HTTP 请求。 可选
context.httpRequest.method string HTTP 请求的类型,例如 GETPOST 等。 可选
context.httpRequest.url string 请求的网址。 可选
context.httpRequest.userAgent string 随请求提供的用户代理信息。 可选
context.httpRequest.referrer string 随请求提供的引荐来源信息。 可选
context.httpRequest.responseStatusCode number 请求的 HTTP 响应状态代码。 可选
context.httpRequest.remoteIp string 发出请求的 IP 地址。它可以是 IPv4、IPv6,也可以是从 IP 地址派生的令牌,具体取决于错误报告中提供的数据。 可选
context.user string 造成崩溃或受崩溃影响的用户。它可以是用户 ID、电子邮件地址,也可以是唯一标识用户的任意令牌。发送错误报告时,如果用户未登录,请将此字段留空。在这种情况下,Error Reporting 系统将使用其他数据(例如远程 IP 地址)来区分受影响的用户。参见 ErrorGroupStats 中的 affected_users_count 可选
context.reportLocation object 源代码中作出报告错误决定的位置,通常是记录错误的位置。对于记录的异常,它将是记录异常的源行,通常靠近捕获异常的位置。 可选
context.reportLocation.filePath string 源代码文件名,可以包含截断的相对路径,也可以是从生产机器开始的完整路径。 可选
context.reportLocation.lineNumber number 从 1 开始。0 表示未知行号。 可选
context.reportLocation.functionName string 用户可理解的函数或方法名称。该值可以包含可选上下文,如类或软件包名称。例如,my.package.MyClass.method(如果使用的是 Java)。 可选
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Stackdriver Error Reporting 文档