如果您的应用错误未显示在 Error Reporting 中,请按照以下步骤进行问题排查。
准备工作
- 验证 Error Reporting 是否可以分析您的日志条目。 - Error Reporting 是基于 Cloud Logging 构建的全球服务,当满足以下所有条件时,它可以分析日志条目: - Assured Workloads 已停用。如需了解详情,请参阅 Assured Workloads 概览。
- 存储日志条目的所有日志存储分区均已停用客户管理的加密密钥 (CMEK)。Error Reporting 无法将日志条目存储在启用 CMEK 的日志存储分区中。如需了解如何确定日志存储桶的 CMEK 配置,请参阅验证密钥启用情况。
- 日志存储桶满足以下条件之一:
    - 日志存储桶存储在日志条目源自的同一项目中。
- 日志条目被路由到一个项目,然后该项目将这些日志条目存储在自己拥有的日志存储桶中。
 
 - 如需查看已配置的接收器列表,请运行以下命令: - gcloud logging sinks list- 该命令会返回类似于以下内容的输出: - NAME DESTINATION FILTER _Default logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Default NOT LOG_ID("cloudaudit.googleapis.com/activity") AND NOT LOG_ID("externalaudit.googleapis.com/activity") AND NOT LOG_ID("cloudaudit.googleapis.com/system_event") AND NOT LOG_ID("externalaudit.googleapis.com/system_event") AND NOT LOG_ID("cloudaudit.googleapis.com/access_transparency") AND NOT LOG_ID("externalaudit.googleapis.com/access_transparency") _Required logging.googleapis.com/projects/my-team-project/locations/global/buckets/_Required LOG_ID("cloudaudit.googleapis.com/activity") OR LOG_ID("externalaudit.googleapis.com/activity") OR LOG_ID("cloudaudit.googleapis.com/system_event") OR LOG_ID("externalaudit.googleapis.com/system_event") OR LOG_ID("cloudaudit.googleapis.com/access_transparency") OR LOG_ID("externalaudit.googleapis.com/access_transparency") logs-from-samples logging.googleapis.com/projects/my-team-project/locations/global/buckets/sample-bucket (empty filter) regional_logs logging.googleapis.com/projects/my-team-project/locations/europe-west1/buckets/bucket_for_regional_logs (empty filter) test-logs logging.googleapis.com/projects/team-b-project/locations/global/buckets/test-bucket (empty filter)- 在此示例中,日志条目的源 Google Cloud 项目为 - my-team-project。因此:- Error Reporting 可以分析由 _Default、_Required和logs-from-samples接收器路由的日志条目,因为日志存储桶由路由日志条目的同一项目存储。
- Error Reporting 无法分析存储在名为 test-logs的日志存储桶中的日志条目,因为my-team-project中的接收器会将日志条目路由到其他项目中的日志存储桶。
 
- 确保您已安装 Google Cloud CLI。 
- 确保您已为 gcloud CLI 启用 - beta组件。
使用日志时
本部分提供问题排查支持,以帮助您解决以下问题:错误数据写入 Cloud Logging 存储分区,而您依赖 Error Reporting 自动分析这些日志存储分区。
生成样本日志条目
如需确认您的项目设置,您可以通过编程方式生成一个日志条目,Error Reporting 将使用以下 gcloud 命令获取该日志条目:
gcloud logging write --payload-type=json test-errors-log \
  '{"serviceContext":
    {"service": "manual-testing"},
    "message": "Test Error\n at /test.js:42:42",
    "context": {"httpRequest":
      {"url": "/test","method": "GET","responseStatusCode": 500}}}'
然后打开 Error Reporting,并确认您已看到新创建的错误。
确认日志条目格式
转到 Cloud Logging 页面,找到包含您的应用发送的异常数据的日志条目。
确认该日志条目使用预期格式。
使用 Error Reporting API 时
- 
  
   
   
     
   
  
 
  
  
    
      Enable the required API. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 发送测试错误 - 尝试手动向该服务发送错误。 - 您可以使用以下 - gcloud命令向 Error Reporting 报告测试错误:- gcloud beta error-reporting events report --service Manual --service-version test1 \ --message "java.lang.TestError: msg at com.example.TestClass.test(TestClass.java:51) at com.example.AnotherClass(AnotherClass.java:25)"- 您可以使用 cURL 命令测试 REST API 调用。在发送以下命令之前,用您的有效值替换 - PROJECT_ID和- API_KEY:- curl -X POST -H "Content-Type: application/json" \ -d '{"message":"java.lang.TestError: msg\n\tat com.example.TestClass.test(TestClass.java:51)\n\tat com.example.AnotherClass(AnotherClass.java:25)","serviceContext":{"service":"manual-testing"}}' \ https://clouderrorreporting.googleapis.com/v1beta1/projects/PROJECT_ID/events:report?key=API_KEY
- 确认发送的载荷 - 确保您的应用以正确的格式向 API 发送异常数据,并且该数据包含所需的属性。 
系统记录了堆栈轨迹,但 Error Reporting 功能无法识别
您使用 jsonPayload 的 message 字段记录错误,并希望 Error Reporting 捕获该错误。不过,系统不会捕获错误数据。
如需解决此失败问题,请尝试执行以下操作:
- 确保 - jsonPayload不包含- stack_trace或- exception字段。如果存在这些字段,则不会评估- message字段。
- 确保堆栈轨迹的结构采用支持的编程语言格式之一。 如果使用不受支持的格式,Error Reporting 将不会捕获堆栈轨迹。 
如需了解详情,请参阅日志中的格式错误。