如何在 Google 应用程序脚本中调试 Web 开发?

Rad*_*dek 3 ide debugging web-applications google-apps-script

我正在测试/学习 webhook。怎么发送,怎么接收。所以我想我会使用GAS。

我有这个简单的脚本,我想知道为什么Logger不起作用。我Projects/Executions可以看到脚本 doPost 已执行但没有日志。电子邮件已发送,脚本返回值。

  • 使用旧的旧编辑器(不知道如何获取新编辑器)
  • 在菜单-资源-云平台项目中显示“此脚本有一个Apps脚本管理的云平台项目”。
  • 当我在编辑器中打开项目时,我收到此消息“该项目正在由 Chrome V8 提供支持的新 Apps 脚本运行时上运行。”
  • 异常日志记录设置为“exceptionLogging”:“STACKDRIVER”设置为默认值

我尝试过console.log(e);,但它对我不起作用。

function doPost(e) {
  
 Logger.log("I was called")
 if(typeof e !== 'undefined'){

    Logger.log(e.parameter);
    Logger.log("I was called 2")
 
    MailApp.sendEmail({
     to: "radek@gmail.com",
     subject: "Call Sucessful",
     htmlBody: "I am your <br>" +
               JSON.stringify(e)+ "<br><br>" +
               JSON.stringify(e.parameters)
      
    });
    
  }  
  return ContentService.createTextOutput(JSON.stringify(e))
}
Run Code Online (Sandbox Code Playgroud)

问题1:我可以让Logger工作吗?

问题2:我想在调试器中看到接受的数据,这可能吗?

问题3: GAS 有什么办法将收到的数据推送到我的网络浏览器吗?当然,浏览器不会发送数据。

问题4:与主题无关,但是...您知道我需要做什么才能使用新编辑器吗?

rom*_*oma 6

正如很多人指定的那样,您可以使用console.log来实现此目的。

不过,我也会时不时地使用 webhook。我发现使用这样的代码直接调试到谷歌电子表格要舒服得多

function doPost(e) {
  log('# doPost', JSON.stringify(e));
  try {
    // Some webhook-processing logic here
    if(e.parameter.action == 'test-error') {
      item.something = nothing;
    }
    if(e.parameter.action == 'test-log') {
      log('# custom log', 'Some data');
    }
  } catch(error) {
    log('# error', JSON.stringify([error, error.stack]));
  }
}

function log(event, message){
  SpreadsheetApp.getActive().getSheetByName('Log').appendRow([new Date(), event, message])
}
Run Code Online (Sandbox Code Playgroud)

电子表格示例: https://docs.google.com/spreadsheets/d/144i9pxDIB_C8ZRZ-6vd9DiPIw8Rt85hTtVoqk7dtHQg/edit? usp=sharing

您可以通过这样的方式触发日志记录

curl -X POST https://script.google.com/macros/s/AKfycby3EoaQ8DOt8H_Mc4vjH6JZkhsaAwYHk_sa9HE5Be3qVo0Ym0b2/exec?action=test-error
Run Code Online (Sandbox Code Playgroud)

或者

curl -X POST https://script.google.com/macros/s/AKfycby3EoaQ8DOt8H_Mc4vjH6JZkhsaAwYHk_sa9HE5Be3qVo0Ym0b2/exec?action=test-log
Run Code Online (Sandbox Code Playgroud)

您可以在 Webhook 解析期间使用相同的日志来自定义某些中间变量的日志记录。

与标准 stackdriver 日志记录相比,我更喜欢这种方式的原因是 google 工作表更明确且更易于管理。


Ala*_*lls 5

如果您希望自己的自定义日志信息转到 Stackdriver,则需要创建一个 Google Cloud Platform 项目,并将该 GCP 项目与您的 Apps 脚本项目关联起来。

首先创建一个新的 GCP 项目:转到您的 GCP 仪表板: https://console.cloud.google.com/home/dashboard?authuser =0

在顶部的蓝色栏中,有一个项目名称的下拉菜单。单击该按钮,将出现一个对话框,其中包含一个用于创建新项目的按钮。创建一个新的 Google Cloud Platform 项目。复制项目编号。

返回 Apps 脚本编辑器。在旧版 Apps 脚本编辑器中,单击“资源”菜单。单击云平台项目。粘贴项目编号并单击按钮。

现在,您拥有的任何 console.log() 语句都会将日志发送到 Stackdriver。并且可以在浏览器中查看 Stackdriver。

注意:有些人建立了自己的日志系统,将服务器端 Apps 脚本代码中的信息记录到 Google 表格中。有一些可用的开源存储库。

新的代码编辑器确实有一种“内置”方式将服务器端信息记录到日志窗格代码编辑器窗口。但是,当然,这假设您正在从代码编辑器运行代码。这项新功能无需更改浏览器选项卡即可查看日志输出。我不知道有什么方法可以将服务器端信息记录到浏览器控制台。您可以将日志信息保存到一个对象中,然后在服务器代码完成后将其发送回客户端,然后在控制台中记录所有内容。

获取日志信息的方式取决于代码最初的触发方式。

  • 来自代码编辑器
  • 来自使用您的应用程序的用户
  • 从 Http 请求到您的 Web 应用程序

登录 Apps 脚本的工作方式有所不同,具体取决于:

  • 正在使用的运行时版本 - V8 或 DEPRECATED_ES5 - 在 appsscript.json 文件中设置或通过旧版编辑器中的“运行”菜单设置,在新 IDE 的“设置”中设置 - 新的 Apps 脚本项目默认为 V8,因此您的项目很可能是使用V8。
  • 您的 Apps 脚本项目是否与 Google Cloud Platform (GCP) 默认或标准项目关联
  • 异常日志记录是否设置为“exceptionLogging”:“STACKDRIVER” - 在 appsscript.json 文件中设置 - 默认始终包含它 - 可能已经正确,除非您删除它。
  • 使用Logger.logconsole.log
  • console.log在服务器“.gs”文件或客户端“.html”文件中 使用。console.log可以在服务器端和客户端代码中使用,但日志打印输出到不同的地方。您无法通过console.log服务器代码中的语句在浏览器开发工具中查看日志。console.log如果您在服务器端 .gs 文件中使用,并且 Apps 脚本项目与标准 GCP 项目关联,则日志只会发送到您的“执行”。我相信将日志发送到 Stackdriver 的唯一方法是使用标准 GCP 项目。问题在于,您只能使用有限数量的 GCP 项目,而无需请求增加配额。

另外,根据您的日志记录设置方式和其他因素,可能会出现问题(错误)。

例如: https: //issuetracker.google.com/issues/134374008

  • 新代码编辑器的推出速度已经延长。请参阅:[rollout](https://workspaceupdates.googleblog.com/2020/12/google-apps-script-ide-better-code-editing.html) 您无法执行任何特殊操作来获取新的代码编辑器。你所能做的就是等待。 (2认同)