You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Error Reporting:如何正确分组错误并保留堆栈跟踪?

Google Cloud Error Reporting 错误分组与堆栈跟踪问题

问题描述

无法让Google Cloud Error Reporting正确对错误进行分组并显示堆栈跟踪:

  • 包含堆栈跟踪时,所有错误都会被归为一类Traceback错误,忽略消息或异常类型差异
  • 仅当注释掉日志中的stack_trace字段时,才能正确上报以异常名称命名的错误

当前使用的日志代码片段:

logger.log(
    message={
        # "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent",
        # "exception": exception_name,
        "message": exception_name,
        "stack_trace": traceback.format_exc(),
    },)

已尝试google_cloud_error_reporting库及logging客户端,均未解决问题。

解决方案

1. 恢复并正确配置ReportedErrorEvent类型字段

GCP Error Reporting需要通过@type字段识别错误事件结构,同时exception字段是错误分组的核心依据,不要注释这两个字段:

import traceback
from google.cloud import logging

logger = logging.Client().logger("your-log-name")

try:
    # 业务代码示例
    raise ValueError("Invalid input value")
except Exception as e:
    exception_name = type(e).__name__
    logger.log_struct(
        {
            "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent",
            "exception": exception_name,
            "message": str(e),
            "stack_trace": traceback.format_exc(),
        },
        severity="ERROR"
    )
  • exception字段指定异常类名(如ValueError),作为错误分组的标识
  • message填写异常的具体描述,而非异常名称
  • 必须指定severity="ERROR",确保Error Reporting能捕获到目标日志

2. 使用google-cloud-error-reporting库的原生方法

直接调用库的report_exception方法,无需手动拼接结构,库会自动处理分组逻辑和堆栈跟踪:

from google.cloud import error_reporting

client = error_reporting.Client()

try:
    raise KeyError("Missing required key")
except Exception as e:
    client.report_exception()

如需自定义上下文信息,可传入额外参数:

client.report_exception(
    exception=e,
    message="Custom error context",
    service_context={"service": "your-service-name", "version": "v1"}
)

3. 确保堆栈跟踪格式未被破坏

  • 不要对traceback.format_exc()的输出做额外字符串处理(如替换、截断),保持原生格式
  • 若手动构建堆栈跟踪,需遵循GCP要求的格式:每行包含文件路径:行号:函数名,示例:
    File "/path/to/your/code.py", line 10, in your_function
        raise ValueError("Invalid input")
    

4. 检查日志接收器配置

  • 确认GCP日志接收器已正确设置为将ERROR级别的日志转发到Error Reporting
  • 确保日志的jsonPayload结构完整,未被其他日志处理工具篡改

内容的提问来源于stack exchange,提问作者Jesse Reich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:55:16