jim*_*ook 66 logging google-apps-script console.log
我是编程新手(已经在Codecademy上学过一些JS课程).我正在尝试创建一个简单的脚本来确定,如果给出一个包含扑克游戏结果的电子表格,谁应该付钱给谁.我打开了Google Apps脚本,并编写了以下内容以开始使用:
function addplayerstoArray(numplayers) {
var playerArray = [];
for (i=0; i<numplayers; i++) {
playerArray.push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
Run Code Online (Sandbox Code Playgroud)
我们的想法是创建一个包含其中玩家总数的数组.运行代码时,我认为它会在控制台上打印"3".但什么都没发生.它说
"ReferenceError:"console"未定义."
A)我不了解Google Apps脚本控制台如何处理打印,以便我可以看到我的代码是否完成了我想要的内容?
B)代码有问题吗?
Pet*_*ann 114
控制台不可用,因为代码在云中运行,而不是在浏览器中运行.相反,使用GAS提供的Logger类:
Logger.log(playerArray[3])
Run Code Online (Sandbox Code Playgroud)
然后在视图>日志下的IDE中查看结果...
编辑:2017-07-20 Apps脚本现在还提供Stackdriver Logging.在View - Console Logs下的脚本编辑器中查看这些日志.
ska*_*han 15
只是为了构建上面的vinnief的hacky解决方案,我使用MsgBox如下:
Browser.msgBox('BorderoToMatriz', Browser.Buttons.OK_CANCEL);
Run Code Online (Sandbox Code Playgroud)
它有点像断点,停止脚本并输出弹出框所需的任何字符串.我特别在Sheets中发现,我在Logger.log中遇到问题,这在大多数情况下提供了足够的解决方法.
A)我不了解Google Apps脚本控制台在打印方面的工作方式,以便可以查看我的代码是否完成了我想要的工作?
Google Apps Script项目的.gs文件上的代码在服务器上运行,而不是在网络浏览器上运行。记录消息的方法是使用Class Logger。
B)代码有问题吗?
如错误消息所述,问题是console尚未定义,但如今相同的代码将引发其他错误:
ReferenceError:未定义“ playerArray”。(第12行,文件“代码”)
那是因为playerArray被定义为局部变量。将行移出功能将解决此问题。
var playerArray = [];
function addplayerstoArray(numplayers) {
for (i=0; i<numplayers; i++) {
playerArray.push(i);
}
}
addplayerstoArray(7);
console.log(playerArray[3])
Run Code Online (Sandbox Code Playgroud)
现在,没有出现任何错误的代码执行,而不是看浏览器控制台,我们应该看看为Stackdriver记录。在Google Apps脚本编辑器用户界面中,点击查看> Stackdriver Logging。
Google于2017年发布了所有脚本Stackdriver Logging并添加了类控制台,因此包括类似console.log('Hello world!')内容不会引发错误,但日志将位于Google Cloud Platform Stackdriver Logging Service而非浏览器控制台上。
2017年6月23日
Stackdriver Logging已移出Early Access。现在,所有脚本都可以访问Stackdriver日志记录。
下面的示例显示如何使用控制台服务在Stackdriver中记录信息。
Run Code Online (Sandbox Code Playgroud)function measuringExecutionTime() { // A simple INFO log message, using sprintf() formatting. console.info('Timing the %s function (%d arguments)', 'myFunction', 1); // Log a JSON object at a DEBUG level. The log is labeled // with the message string in the log viewer, and the JSON content // is displayed in the expanded log structure under "structPayload". var parameters = { isValid: true, content: 'some string', timestamp: new Date() }; console.log({message: 'Function Input', initialData: parameters}); var label = 'myFunction() time'; // Labels the timing log entry. console.time(label); // Starts the timer. try { myFunction(parameters); // Function to time. } catch (e) { // Logs an ERROR message. console.error('myFunction() yielded an error: ' + e); } console.timeEnd(label); // Stops the timer, logs execution duration. }
虽然Logger.log()从技术上讲,这是向控制台输出内容的正确方法,但它有一些烦恼:
Logger.log(playerArray),然后在调试后你可能想删除Logger.log(playerArray),因此还需要1-2个步骤.相反,每当我想调试一些东西时,我都会添加断点(点击行号)并按下Debug按钮(bug图标).当您为变量赋值时,断点很有效,但是当您启动变量并希望稍后查看它时,断点不太好,这与op尝试做的类似.在这种情况下,我会通过输入"x"(x标记点!)强制中断条件以抛出运行时错误:
与查看日志比较:
调试控制台包含更多信息,比日志覆盖更容易阅读.这种方法的一个小好处是,如果保持干净的代码是你的事情,你永远不必担心用一堆日志记录命令污染你的代码.即使您输入"x",您也不得不记得在调试过程中删除它,否则您的代码将无法运行(内置清理措施,yay).
在google脚本项目中,您可以创建html文件(例如:index.html)或gs文件(例如:code.gs)..gs文件在服务器上执行,您可以使用Logger.log作为@Peter Herrman描述.但是,如果函数是在.html文件中创建的,则它将在用户的浏览器上执行,您可以使用console.log.可以通过Windows/Linux上的Ctrl Shift J或Mac上的Cmd Opt J 查看 Chrome浏览器控制台
如果要在html文件上使用Logger.log,可以使用scriptlet从html文件中调用Logger.log函数.为此,您将插入<?Logger.log(某事)?>用你要记录的东西替换东西.标准的scriptlet,使用语法<?...?>,执行代码而不明确地向页面输出内容.
2020 年 2 月,Google 宣布对内置 Google Apps Script IDE 进行重大升级,现在支持 console.log()。因此,您现在可以同时使用两者:
快乐编码!
| 归档时间: |
|
| 查看次数: |
89412 次 |
| 最近记录: |