如何在 Google 应用程序脚本中调试 Web 开发?
How to debug web development in Google Application Script?
我是 testing/learning 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))
}
问题 1:我可以让 Logger 工作吗?
问题 2:我想在 Debugger 中查看接受的数据,可以吗?
问题3: GAS 有什么办法可以将收到的数据推送到我的网络浏览器吗?浏览器当然不会发送数据。
问题4:与主题无关但是...你知道我需要做什么才能使用新的编辑器?
您可以使用 console.log() 查看“我的执行”中的内容。
如果您希望自己的自定义日志信息转到 Stackdriver,则需要创建一个 Google Cloud Platform 项目,并将该 GCP 项目与您的 Apps 脚本项目相关联。
首先创建一个新的 GCP 项目:
转到您的 GCP 信息中心:
https://console.cloud.google.com/home/dashboard?authuser=0
在顶部的蓝色栏中,有一个项目名称的下拉菜单。单击它,将出现一个对话框,其中包含用于创建新项目的按钮。
创建一个新的 Google 云平台项目。
复制项目编号。
返回 Apps 脚本编辑器。
在旧版 Apps 脚本编辑器中,点击“资源”菜单。
单击云平台项目。
粘贴项目编号并单击按钮。
现在,您拥有的任何 console.log() 语句都会将日志发送到 Stackdriver。
并且可以在浏览器中查看 Stackdriver。
注意:有些人设置了自己的日志系统,将服务器端 Apps 脚本代码中的信息记录到 Google Sheet。有一些可用的开源存储库。
新的代码编辑器确实有一种“内置”方式可以将服务器端信息记录到日志窗格代码编辑器中 window。但是,当然,这假设您是 运行ning 来自代码编辑器的代码。此新功能避免了更改浏览器选项卡以查看日志输出的需要。我不知道有什么方法可以将服务器端信息记录到浏览器控制台。您可以将日志信息保存到一个对象中,然后在服务器代码完成后将其发送回客户端,然后在控制台中记录所有内容。
获取日志信息的方式取决于代码最初是如何触发的。
- 来自代码编辑器
- 来自使用您的应用的用户
- 从 Http 请求到您的 Web 应用程序
在 Apps 脚本中登录的方式不同,具体取决于:
- 运行 正在使用的时间版本 - V8 或 DEPRECATED_ES5 - 在 appsscript.json 文件中设置或通过 Legacy 编辑器中的“运行”菜单设置,设置在“新 IDE 中的“设置”- 新 Apps 脚本项目默认为 V8,因此您的项目可能正在使用 V8。
- 您的 Apps 脚本项目是否与 Google 云平台相关联
(GCP) 默认或 标准 项目
- 异常日志是否设置为“exceptionLogging”:“STACKDRIVER” - 在 appsscript.json 文件中设置 - 默认总是包含它 - 可能已经正确,除非你删除它。
- 使用
Logger.log
或 console.log
- 在服务器“.gs”文件或客户端“.html”中使用
console.log
文件。 console.log
可用于服务器端和客户端代码
但是打印出来的日志去了不同的地方。你看不到日志
在浏览器开发工具中从你的 console.log
语句
服务器代码。如果您在服务器端 .gs 文件中使用 console.log
,并且 Apps 脚本项目 未 与标准 GCP 项目相关联,则日志只会发送到您的“执行。 “我相信将日志发送到 Stackdriver 的唯一方法是使用标准 GCP 项目。这样做的问题是,您只有那么多 GCP 项目可以使用而无需请求增加配额。
另外,根据您设置日志记录的方式和其他因素,可能会出现问题(错误)。
因为很多人指定,你可以使用console.log。
不过,我有时也会使用 webhook。而且我发现使用像这样的代码
直接调试到 google 电子表格要舒服得多
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])
}
示例电子表格:
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
或
curl -X POST https://script.google.com/macros/s/AKfycby3EoaQ8DOt8H_Mc4vjH6JZkhsaAwYHk_sa9HE5Be3qVo0Ym0b2/exec?action=test-log
您可以在 webhook 解析期间使用相同的日志来自定义记录一些中间变量。
与标准堆栈驱动程序日志记录相比,我更喜欢它的原因是 google 工作表更明确且更易于管理。
我是 testing/learning 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))
}
问题 1:我可以让 Logger 工作吗?
问题 2:我想在 Debugger 中查看接受的数据,可以吗?
问题3: GAS 有什么办法可以将收到的数据推送到我的网络浏览器吗?浏览器当然不会发送数据。
问题4:与主题无关但是...你知道我需要做什么才能使用新的编辑器?
您可以使用 console.log() 查看“我的执行”中的内容。
如果您希望自己的自定义日志信息转到 Stackdriver,则需要创建一个 Google Cloud Platform 项目,并将该 GCP 项目与您的 Apps 脚本项目相关联。
首先创建一个新的 GCP 项目: 转到您的 GCP 信息中心: https://console.cloud.google.com/home/dashboard?authuser=0
在顶部的蓝色栏中,有一个项目名称的下拉菜单。单击它,将出现一个对话框,其中包含用于创建新项目的按钮。 创建一个新的 Google 云平台项目。 复制项目编号。
返回 Apps 脚本编辑器。 在旧版 Apps 脚本编辑器中,点击“资源”菜单。 单击云平台项目。 粘贴项目编号并单击按钮。
现在,您拥有的任何 console.log() 语句都会将日志发送到 Stackdriver。 并且可以在浏览器中查看 Stackdriver。
注意:有些人设置了自己的日志系统,将服务器端 Apps 脚本代码中的信息记录到 Google Sheet。有一些可用的开源存储库。
新的代码编辑器确实有一种“内置”方式可以将服务器端信息记录到日志窗格代码编辑器中 window。但是,当然,这假设您是 运行ning 来自代码编辑器的代码。此新功能避免了更改浏览器选项卡以查看日志输出的需要。我不知道有什么方法可以将服务器端信息记录到浏览器控制台。您可以将日志信息保存到一个对象中,然后在服务器代码完成后将其发送回客户端,然后在控制台中记录所有内容。
获取日志信息的方式取决于代码最初是如何触发的。
- 来自代码编辑器
- 来自使用您的应用的用户
- 从 Http 请求到您的 Web 应用程序
在 Apps 脚本中登录的方式不同,具体取决于:
- 运行 正在使用的时间版本 - V8 或 DEPRECATED_ES5 - 在 appsscript.json 文件中设置或通过 Legacy 编辑器中的“运行”菜单设置,设置在“新 IDE 中的“设置”- 新 Apps 脚本项目默认为 V8,因此您的项目可能正在使用 V8。
- 您的 Apps 脚本项目是否与 Google 云平台相关联 (GCP) 默认或 标准 项目
- 异常日志是否设置为“exceptionLogging”:“STACKDRIVER” - 在 appsscript.json 文件中设置 - 默认总是包含它 - 可能已经正确,除非你删除它。
- 使用
Logger.log
或console.log
- 在服务器“.gs”文件或客户端“.html”中使用
console.log
文件。console.log
可用于服务器端和客户端代码 但是打印出来的日志去了不同的地方。你看不到日志 在浏览器开发工具中从你的console.log
语句 服务器代码。如果您在服务器端 .gs 文件中使用console.log
,并且 Apps 脚本项目 未 与标准 GCP 项目相关联,则日志只会发送到您的“执行。 “我相信将日志发送到 Stackdriver 的唯一方法是使用标准 GCP 项目。这样做的问题是,您只有那么多 GCP 项目可以使用而无需请求增加配额。
另外,根据您设置日志记录的方式和其他因素,可能会出现问题(错误)。
因为很多人指定,你可以使用console.log。
不过,我有时也会使用 webhook。而且我发现使用像这样的代码
直接调试到 google 电子表格要舒服得多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])
}
示例电子表格: 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
或
curl -X POST https://script.google.com/macros/s/AKfycby3EoaQ8DOt8H_Mc4vjH6JZkhsaAwYHk_sa9HE5Be3qVo0Ym0b2/exec?action=test-log
您可以在 webhook 解析期间使用相同的日志来自定义记录一些中间变量。
与标准堆栈驱动程序日志记录相比,我更喜欢它的原因是 google 工作表更明确且更易于管理。