97

我对编程很陌生(在 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) 代码有问题吗?

4

9 回答 9

155

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

Logger.log(playerArray[3])

然后在 IDE 中的 View > Logs... 下查看结果

这是有关使用 GAS进行日志记录的一些文档。

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

于 2012-09-12T00:12:59.180 回答
18

只是为了建立上面 vinnief 的 hacky 解决方案,我像这样使用 MsgBox:

Browser.msgBox('BorderoToMatriz', Browser.Buttons.OK_CANCEL);

它的作用有点像断点,停止脚本并将您需要的任何字符串输出到弹出框。我发现特别是在表格中,我在使用 Logger.log 时遇到问题,这在大多数情况下提供了足够的解决方法。

于 2015-05-03T14:21:11.027 回答
13

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

  1. 输出可能是非结构化的混乱,难以快速消化。
  2. 您必须首先运行脚本,然后单击查看/日志,这是额外的两次单击(如果您记得 Ctrl+Enter 键盘快捷键,则单击一次)。
  3. 您必须 insert Logger.log(playerArray),然后在调试后您可能想要删除Logger.log(playerArray),因此需要额外的 1-2 个步骤。
  4. 您必须单击“确定”关闭覆盖(再单击一次)。

相反,每当我想调试某些东西时,我都会添加断点(单击行号)并按下调试按钮(错误图标)。当您将某些内容分配给变量时,断点工作得很好,但当您启动一个变量并希望稍后查看它的内部时,断点就不太好用,这与操作试图做的事情类似。在这种情况下,我会通过输入“x”(x 标记该位置!)来强制中断条件以引发运行时错误:

在此处输入图像描述

与查看日志比较:

在此处输入图像描述

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

于 2017-05-17T15:16:53.780 回答
10

回答 OP 问题

A) 关于 Google Apps 脚本控制台在打印方面的工作方式,我有什么不明白的地方,以便我可以查看我的代码是否完成了我想要的工作?

Google Apps 脚本项目的 .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])

现在代码执行没有抛出错误,我们应该查看 Stackdriver Logging,而不是查看浏览器控制台。在 Google Apps 脚本编辑器 UI 中,点击View > Stackdriver Logging

附录

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

来自Google Apps 脚本发行说明 2017

2017 年 6 月 23 日

Stackdriver Logging已退出抢先体验。所有脚本现在都可以访问 Stackdriver 日志记录。

日志记录 > Stackdriver 日志记录

以下示例展示了如何使用控制台服务在 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.
}
于 2018-01-18T23:55:58.080 回答
6

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

如果要在 html 文件上使用 Logger.log,可以使用scriptlet从 html 文件调用 Logger.log 函数。为此,您将插入<? Logger.log(something) ?>用您想要记录的任何内容替换某些内容。标准小脚本,使用语法 <? ... ?>,执行代码而不显式地将内容输出到页面。

于 2016-07-14T15:04:30.510 回答
3

2020 年更新

2020 年 2 月,Google 宣布对内置的 Google Apps Script IDE进行重大升级,现在支持 console.log()。因此,您现在可以同时使用两者:

  1. 记录器.log()
  2. 控制台.log()

快乐编码!

于 2020-04-11T01:08:29.990 回答
2

确保选择需要执行的功能。看截图:
应用脚本日志记录

于 2021-01-25T12:31:24.940 回答
0

在新的 Apps 脚本(2021 年发布)中查看日志:

  1. 转到 Apps 脚本
  2. 在从编辑器到第 4 个选项卡的侧边栏切换选项卡中(我有其他语言,所以我不知道运行或打开它的名称)abowe settings
  3. 此选项卡包含所有脚本运行的历史记录,只需将其下拉即可看到您的日志
于 2021-11-18T20:57:08.490 回答
-2

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

于 2021-04-06T14:03:03.630 回答