【问题标题】:Debug a Google Apps Script which is triggered by post request?调试由发布请求触发的 Google Apps 脚本?
【发布时间】:2019-07-13 07:24:24
【问题描述】:

我在 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 函数从不在调试日志中记录任何内容。我希望它会在这里:

奇怪的是,执行列表也是空的:

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

所以我想的问题归结为,当发布请求触发时,我如何从脚本(部署为 Web 应用程序)中准确记录,以及如何查看其执行情况?换句话说,你如何调试这样的脚本?

【问题讨论】:

  • 您可以在脚本中调用 doPost() 函数,如用于触发器的 done here。此外,可以选择添加 try and catch block 并将错误记录在 google 工作表的不同工作表上。

标签: google-apps-script google-apps


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!这与您描述的完全一样。只是一个小观察,在 StackDriver Logging UI 中,日志不会使用刷新按钮刷新。您需要转到您的脚本 View -> StackDriver Logging,再次加载 StackDriver Logging UI 以查看新日志。
【解决方案2】:

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

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

我仍然不清楚如何查看客户端大小脚本中发生的情况。

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 2020-11-03
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多