Google Apps Script PropertiesService - 被不可靠的执行记录和编辑器调试搞糊涂了
Google Apps Script PropertiesService - Confused by unreliable Executions logging & editor debugging
我发现 PropertiesService
不可靠,但可能我只是不熟悉 Google Apps Script 或 Stackdriver,犯了一个错误或假设了一些可能导致问题的地方。
这是脚本:
sp = PropertiesService.getScriptProperties()
sp.setProperties({
'somekey': 'value'
})
props = sp.getProperties()
console.log(props.toString())
这是我写这个 SO 问题之前的日志:
Type Start Time Duration Status Stackdriver Log
Trigger Oct 9, 2020, 11:19:07 PM 0.541 s Completed Debug [object Object]
Editor Oct 9, 2020, 11:11:43 PM 0 s Unknown Debug [object Object]
Editor Oct 9, 2020, 11:08:09 PM 0 s Unknown Debug [object Object], ScriptProperties
Editor Oct 9, 2020, 11:05:16 PM 0 s Unknown Debug [object Object], ScriptProperties
标记为 Editor
类型的是从应用程序脚本 Web IDE 手动调试运行,我在添加那些 PropertiesServices
行之前每 15 分钟设置一次 onTrigger
。每当我每次执行查看Execution
日志页面的时候,需要几分钟才能得到日志结果,而刚才,半个多小时以后,我重新查看了那些Unknown
状态日志标记为Completed
且均在0.5s以下。
这只是一个小故障吗?如果这不正常或者我做了一个 mistake/wrong 假设,我应该怎么做才能确保我不会遇到这种不可预测的结果?
为什么我不能从 props
键值对中获取字符串?
为了相对更好和可靠的日志记录,请直接使用 Stackdriver(即,查看 > Stackdriver 日志记录),而不是从仪表板中的“执行”页面。为此,您需要通过在资源 > 云平台项目 > 更改项目中设置自定义项目编号来 switch Google cloud project from default to standard。
记录对象时,您必须始终 JSON.stringify
对象,然后再将其提供给 console
。 props.toString()
只会 return [object Object]
因为这是它的内部结构。
/*<ignore>*/console.config({maximize:true,timeStamps:false,autoScroll:false});/*</ignore>*/
const props = {a:1};
console.log(props.toString());//[object Object]
console.log(JSON.stringify(props));//{"a":1}
<!-- https://meta.whosebug.com/a/375985/ --> <script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
这似乎工作得很好:
function testprops() {
let sp = PropertiesService.getScriptProperties();
sp.setProperties({'somekey': Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy:MM:dd HH:mm:ss")});
let props = sp.getProperties();
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(props.somekey), "View Properties");
}
我发现 PropertiesService
不可靠,但可能我只是不熟悉 Google Apps Script 或 Stackdriver,犯了一个错误或假设了一些可能导致问题的地方。
这是脚本:
sp = PropertiesService.getScriptProperties()
sp.setProperties({
'somekey': 'value'
})
props = sp.getProperties()
console.log(props.toString())
这是我写这个 SO 问题之前的日志:
Type Start Time Duration Status Stackdriver Log
Trigger Oct 9, 2020, 11:19:07 PM 0.541 s Completed Debug [object Object]
Editor Oct 9, 2020, 11:11:43 PM 0 s Unknown Debug [object Object]
Editor Oct 9, 2020, 11:08:09 PM 0 s Unknown Debug [object Object], ScriptProperties
Editor Oct 9, 2020, 11:05:16 PM 0 s Unknown Debug [object Object], ScriptProperties
标记为 Editor
类型的是从应用程序脚本 Web IDE 手动调试运行,我在添加那些 PropertiesServices
行之前每 15 分钟设置一次 onTrigger
。每当我每次执行查看Execution
日志页面的时候,需要几分钟才能得到日志结果,而刚才,半个多小时以后,我重新查看了那些Unknown
状态日志标记为Completed
且均在0.5s以下。
这只是一个小故障吗?如果这不正常或者我做了一个 mistake/wrong 假设,我应该怎么做才能确保我不会遇到这种不可预测的结果?
为什么我不能从 props
键值对中获取字符串?
为了相对更好和可靠的日志记录,请直接使用 Stackdriver(即,查看 > Stackdriver 日志记录),而不是从仪表板中的“执行”页面。为此,您需要通过在资源 > 云平台项目 > 更改项目中设置自定义项目编号来 switch Google cloud project from default to standard。
记录对象时,您必须始终
JSON.stringify
对象,然后再将其提供给console
。props.toString()
只会 return[object Object]
因为这是它的内部结构。
/*<ignore>*/console.config({maximize:true,timeStamps:false,autoScroll:false});/*</ignore>*/
const props = {a:1};
console.log(props.toString());//[object Object]
console.log(JSON.stringify(props));//{"a":1}
<!-- https://meta.whosebug.com/a/375985/ --> <script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
这似乎工作得很好:
function testprops() {
let sp = PropertiesService.getScriptProperties();
sp.setProperties({'somekey': Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy:MM:dd HH:mm:ss")});
let props = sp.getProperties();
SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(props.somekey), "View Properties");
}