6

我正在重新使用 gcloud cli 将事件发送到 StackDriver 错误报告。
(非常有限的)文档在这里:https ://cloud.google.com/sdk/gcloud/reference/beta/error-reporting/events/report

无论我发送什么消息,我似乎都会收到此错误:

错误:(gcloud.beta.error-reporting.events.report)INVALID_ARGUMENT:ReportedErrorEvent.context 必须包含位置,除非message包含异常或堆栈跟踪。

我尝试将消息格式化为错误报告的 JSON 表示形式:https ://cloud.google.com/error-reporting/docs/formatting-error-messages 但消息似乎相同。这是一个示例命令和 JSON:

gcloud beta error-reporting events report --service foo --message-file err.json

{
    "serviceContext": {
        "service": "foo"
    },
    "message": "Whoops!",
    "context": {
        "reportLocation": {
            "filePath": "/usr/local/bin/test",
            "lineNumber": 123,
            "functionName": "main"
        }
    }
}
4

3 回答 3

2

还有一种方式。

gcloud logging write --payload-type=json test-errors-log '
{
  "serviceContext": {"service": "foo"},                        
  "message": "message with stacktrace\n at /test.js"
}
'
gcloud logging write --payload-type=json test-errors-log '
{
  "@type": "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent",
  "message": "message without stacktrace"
}
'
gcloud beta error-reporting events report --service foo --message 'message with stacktrace
at /test.js'
于 2019-12-17T12:50:48.180 回答
1

gcloud --message 或 --message-field 参数只是message报告错误的字段,而不是整个 JSON。由于您无法reportLocation通过 gcloud 提供,message因此必须是堆栈跟踪或异常。

API Explorer与原始请求一起使用是可行的。记录错误也会通过以下方式进入错误报告:

gcloud beta logging write --payload-type=json test-errors-log '
{
    "serviceContext": {
        "service": "foo"
    },                        
    "message": "Whoops!",
    "context": {
        "reportLocation": {
            "filePath": "/usr/local/bin/test",
            "lineNumber": 123,
            "functionName": "main"
        }
    }
}'
于 2017-09-22T14:30:34.157 回答
0

尝试在上下文中添加 httpRequest 详细信息。

您可以在文档中找到 json 有效负载的详细信息。json中的父对象是ErrorEvent

您可以从那里开始并找到指向其子元素ServiceContextErrorContext的链接

虽然我没有尝试过命令行选项,但我调试了我们在应用程序中使用的堆栈驱动程序日志记录类,以找出我们正在发送的 json 有效负载,这是从我们的应用程序触发的示例 json。

{
  "context": {
    "httpRequest": {
      "responseStatusCode": 500,
      "method": "GET",
      "url": "http://localhost:16500/product"
    },
    "user": "2247177"
  },
  "message": "org.springframework.web.client.HttpServerErrorException:  500 Server Error
  at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java: 94)
  ",
  "serviceContext": {
    "service": "cart",
    "version": ""
  }

于 2017-09-19T04:34:53.113 回答