调试由POST请求触发的Google Apps脚本?

3
我有一个简单的脚本在Google Sheets中,它由Slack中的命令触发,只需将Slack消息添加为新行。它是一个相当简单的功能,并部署为Web应用程序,可以正常工作。
function doPost(req) {
var sheet = SpreadsheetApp.openById('[My Sheet Id]');
var params = req.parameters;

Logger.log(params.text);

sheet.appendRow(params.text);

return ContentService.createTextOutput("Saved your entry:" + params.text);
}

然而,Logger.log函数从未在调试日志中记录任何内容。我期望它应该在这里:

enter image description here

奇怪的是,执行名单也是空的:

enter image description here

但是脚本正在被触发,并将文本消息附加到Google表格中。
因此,问题归结为:我应该如何记录来自脚本(部署为Web应用程序)的日志,当它被Post请求触发时,并且我如何查看它的执行情况?换句话说,您如何调试这些脚本?

你可以在脚本内部调用doPost()函数,就像这里对触发器的处理方式一样。此外,还可以添加try和catch块,并将错误日志记录在Google Sheets的不同工作表中。 - undefined
3个回答

9
当通过远程调用doPost(e)时,会创建一个服务器端会话,您无法通过Logger.log()访问其日志。但是,有一种替代方法,即StackDriver日志记录(可通过应用脚本编辑器菜单中的查看->StackDriver日志记录访问)。
启用StackDriver日志记录后,您需要将所有的Logger.log()调用替换为console.log()

2
谢谢!这个确实按照你描述的方式正常工作。只是有一个小观察,就是在 StackDriver Logging 的用户界面中,日志不会随着刷新按钮的点击而更新。你需要进入脚本视图 -> StackDriver Logging,重新加载 StackDriver Logging 用户界面才能看到新的日志。 - undefined

1
在我的网络应用程序的服务器端代码中,我将日志消息写入电子表格。
/**
  log entries stored in spreadsheet
  The msg must be a string so use + not comma
 */
function myLog(msg) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  let logSht = ss.getSheetByName('DebugLog'); 
  if (!logSht)
    ss.insertSheet('log'); 
  const nxtLogRow = getLastRow (logSht.getRange('A1:A')) + 1;
  logSht.getRange('A'+ nxtLogRow)
        .setValue(msg );
}

在代码本身中,请确保使用加号而不是逗号,因为该程序需要一个单一的字符串。
  myLog('Begin buildContributorArr - userSession:\n' + userSession );

我仍然不太清楚如何查看客户端脚本中正在发生的事情。


0

我重新启动这个话题,因为它仍然很烦人。 我尝试了这个问题中的不同答案,但不幸的是,在2023年也没有起作用! 我不想将我的应用程序脚本与Google Cloud项目关联起来。

所以我想到使用Pipedream来调试我的脚本。 它像魔法一样运行:

function doPost (e) {
  var url = "PIPEDREAM_URL";
  var parameters = e.parameter; 
  var payload = JSON.stringify({data: parameters});

  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': payload
  };
  var response = UrlFetchApp.fetch(url, options);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接