在Google Apps脚本中打印到控制台?

时间:2012-09-11 20:45:51

标签: 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])

我们的想法是创建一个包含玩家总数的数组。运行代码时,我认为它会在控制台上打印“3”。但什么都没发生。它说

  

“ReferenceError:”控制台“未定义。”

A)我不了解Google Apps脚本控制台如何处理打印,以便我可以看到我的代码是否正在完成我想要的内容?

B)代码有问题吗?

7 个答案:

答案 0 :(得分:102)

控制台不可用,因为代码在云中运行,而不是在浏览器中运行。相反,请使用GAS提供的Logger类:

Logger.log(playerArray[3])

然后在View&gt;下的IDE中查看结果日志...

以下是logging with GAS的一些文档。

编辑:2017-07-20 Apps脚本现在还提供Stackdriver Logging。在“查看 - 控制台日志”下的脚本编辑器中查看这些日志。

答案 1 :(得分:5)

在google脚本项目中,您可以创建html文件(例如:index.html)或gs文件(例如:code.gs)。 .gs文件在服务器上执行,您可以使用Logger.log作为@Peter Herrman描述。但是,如果该函数是在.html文件中创建的,则它将在用户的浏览器上执行,您可以使用console.log。 Chrome浏览器控制台可以是{/ 3}},可以是Windows / Linux上的Ctrl Shift J或Mac上的Cmd Opt J

如果要在html文件上使用Logger.log,可以使用viewed从html文件中调用Logger.log函数。为此,您需要插入&lt;? Logger.log(某事物)?&gt; 用您要记录的内容替换某些内容。标准scriptlet,使用语法&lt;? ...?&gt;,执行代码而不明确地向页面输出内容。

答案 2 :(得分:5)

即使Logger.log()在技术上是向控制台输出内容的正确方法,但它有一些烦恼:

  1. 输出可能是非结构化的混乱,很难快速消化。
  2. 您必须首先运行脚本,然后单击“查看/日志”,这是两次额外点击(如果您还记得Ctrl + Enter键盘快捷键,则为一次)。
  3. 你必须插入Logger.log(playerArray),然后在调试之后你可能想删除Logger.log(playerArray),因此还需要再增加1-2步。
  4. 您必须单击“确定”才能关闭叠加层(还有一次额外点击)。
  5. 相反,每当我想调试一些东西时,我都会添加断点(点击行号)并按下Debug按钮(bug图标)。当您为变量赋值时,断点很有效,但是当您启动变量并希望稍后查看它时,断点不太好,这与op尝试做的类似。在这种情况下,我会通过输入“x”(x标记点!)强制中断条件以抛出运行时错误:

    enter image description here

    与查看日志比较:

    enter image description here

    调试控制台包含更多信息,比日志覆盖更容易阅读。这种方法的一个小好处是,如果保持干净的代码是你的事情,你永远不必担心用一堆日志记录命令来污染你的代码。即使您输入“x”,您也不得不记得在调试过程中删除它,否则您的代码将无法运行(内置清理措施,yay)。

答案 3 :(得分:5)

回答OP问题

  

A)我对Google Apps脚本控制台如何处理打印方式有什么不了解,以便我可以看到我的代码是否正在完成我喜欢的内容?

Google Apps脚本项目的.gs文件代码在服务器上运行,而不是在Web浏览器上运行。记录消息的方法是使用Class Logger

  

B)代码有问题吗?

正如错误消息所说,问题是console没有定义,但现在相同的代码会抛出其他错误:

  

ReferenceError:&#34; playerArray&#34;没有定义。 (第12行,文件&#34;代码&#34;)

这是因为playerArray被定义为局部变量。将该行移出该函数将解决此问题。

var playerArray = [];

function addplayerstoArray(numplayers) {
  for (i=0; i<numplayers; i++) {
    playerArray.push(i);
  }
}  

addplayerstoArray(7);

console.log(playerArray[3])

现在代码执行时没有抛出错误,而是查看浏览器控制台,我们应该查看Stackdriver Logging。在Google Apps脚本编辑器UI中,点击查看&gt;堆栈驱动程序记录

附录

2017年,Google向所有脚本发布了Stackdriver Logging并添加了Class Console,因此包括console.log('Hello world!')之类的内容不会引发错误,但日志将在Google Cloud Platform Stackdriver日志服务而不是浏览器控制台上。

来自Google Apps Script Release Notes 2017

  

2017年6月23日

     

Stackdriver Logging已退出Early Access。所有脚本现在都可以访问Stackdriver日志记录。

来自Logging > Stackdriver logging

  

以下示例显示如何使用console服务在Stackdriver中记录信息。

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.
}

答案 4 :(得分:2)

于2020年更新

2020年2月,Google宣布对内置Google Apps Script IDE major upgrade进行now supports console.log()。因此,您现在可以同时使用:

  1. Logger.log()
  2. console.log()

祝您编程愉快!

答案 5 :(得分:0)

确保您选择了需要执行的功能。看截图:
https://github.com/DenysKravets/japanese-srs/tree/heroku

答案 6 :(得分:-2)

Logger.log(您的消息),然后查看日志。