Appscript处理的错误未显示在stackdriver错误中

时间:2019-01-08 14:11:53

标签: google-apps-script stackdriver gmail-addons

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

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

在上面的示例中,错误日志显示在Stackdriver Logs中,但不会出现在Stackdriver Error Reporting中。有没有一种方法可以实现而无需实际抛出(并使加载项崩溃)?

1 个答案:

答案 0 :(得分:2)

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

如果我的理解是正确的,该解决方法如何?在这种解决方法中,它使用Stackdriver Error Reporting API中的projects.events.report方法。

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

  • 使用清单和其他将https://www.googleapis.com/auth/cloud-platform添加到范围。
  • 在API控制台上启用Stackdriver Error Reporting 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时,有时会出现结果反射较晚的情况。因此,如果在调用API后结果未反映到StackDriver错误报告中,请稍候。

参考文献:

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