Apps 脚本处理未在堆栈驱动程序错误中显示的错误

Appscript handled errors not shown in stackdriver errors

我正在使用 Appscript 编写 Gmail 插件。如果应用程序抛出未处理的错误,它将自动记录在 Stackdriver 上并显示在 Stackdriver 错误报告中。但是,我想手动将错误发送到 Stackdriver 错误报告:

try{
    thisMayThrowAnError();
catch(err){
    console.error(new Error("Something Failed"))
}

在上面的示例中,错误日志显示在 Stackdriver 日志中,但不会出现在 Stackdriver 错误报告中。有没有办法在不实际抛出它(并使插件崩溃)的情况下实现这一目标?

  • 您想手动向 StackDriver 错误报告报告自定义错误。
  • 您不想停止脚本。

如果我的理解是正确的,这个解决方法怎么样?在此解决方法中,它使用 Stackdriver 错误报告 API.

projects.events.report 的方法

在使用此示例脚本之前,请执行以下操作。

  • 使用清单和其他方式将 https://www.googleapis.com/auth/cloud-platform 添加到范围。
  • 在 API 控制台启用 Stackdriver 错误报告 API。

示例脚本:

try {
    thisMayThrowAnError();
} catch(err) {
  var projectId = "project-id-#####"; // Please set the project ID of project including your script.
  var payload = { // Please modify this for your situation.
    message: "Something Failed",
    serviceContext: {service: "sample"},
    context: {reportLocation: {functionName: "sampleFunctionName"}},
  };

  var url = "https://clouderrorreporting.googleapis.com/v1beta1/projects/" + projectId + "/events:report";
  var params = {
    method: "post",
    payload: JSON.stringify(payload),
    contentType: "application/json",
    headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()},
  }
  UrlFetchApp.fetch(url, params);
}

注:

  • 这是一个简单的示例脚本。所以请根据你的情况修改。
  • 在这个脚本中,payload的每个值都是样本值。所以请根据你的情况修改。
  • 当我调用这个API时,出现了result反映迟的情况。因此,如果调用 API 后结果未反映到 StackDriver Error Reporting,请稍等。

参考文献:

根据您的问题,我了解到您使用的是 Google Apps 脚本。如果您使用其他语言,请告诉我。如果此解决方法不是您想要的结果,我深表歉意。