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

时间:2019-02-19 17:52:44

标签: google-apps-script google-apps

我在Google表格中有一个简单的脚本,该脚本由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

Bizarrely Executions列表也为空:

enter image description here

但是脚本正在被触发并将文本消息附加到Google工作表中。

因此,我想的问题归结为:由发帖请求触发后,如何才能从脚本(作为Web应用程序部署)中准确记录日志,以及如何查看其执行情况?换句话说,您如何调试此类脚本?

2 个答案:

答案 0 :(得分:1)

远程调用doPost(e)时,它将创建一个服务器端会话,您无法通过Logger.log()访问该日志。

但是,有另一种选择,即。 StackDriver Logging(可通过 View -> StackDriver Logging 从Apps脚本编辑器菜单访问)。

启用了StackDriver日志记录后,您需要将所有Logger.log()调用替换为console.log()

答案 1 :(得分:0)

在我的 web 应用程序的服务器端代码中,我将日志消息写入电子表格

python -m venv myprojectenv

在代码本身中一定要使用加号而不是逗号,因为例程需要单个字符串。

/**
  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 );
}

我仍然不清楚您如何才能看到客户端大小脚本中发生的事情。