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

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中查看结果...

这里有一些关于使用GAS进行日志记录的文档.

编辑:2017-07-20 Apps脚本现在还提供Stackdriver Logging.在View - Console Logs下的脚本编辑器中查看这些日志.

  • 在为电子表格编写函数时如何完成?我似乎无法找到日志记录输出的位置. (19认同)
  • 超级有帮助.谢谢!现在,如果只有日志是实时更新,并且在一个偏远的位置进行快速测试. (3认同)

ska*_*han 15

只是为了构建上面的vinnief的hacky解决方案,我使用MsgBox如下:

Browser.msgBox('BorderoToMatriz', Browser.Buttons.OK_CANCEL);
Run Code Online (Sandbox Code Playgroud)

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

  • 2021 年,我收到“异常:您无权调用 msgBox” (3认同)

Rub*_*bén 8

回答OP问题

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而非浏览器控制台上。

摘自2017Google Apps脚本发行说明

2017年6月23日

Stackdriver Logging已移出Early Access。现在,所有脚本都可以访问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.
}
Run Code Online (Sandbox Code Playgroud)


thd*_*oan 7

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

  1. 输出可能是非结构化的混乱,很难快速消化.
  2. 您必须先运行脚本,然后单击"查看/日志",这是两次额外的单击(如果您还记得Ctrl + Enter键盘快捷键,则为一次).
  3. 你必须插入Logger.log(playerArray),然后在调试后你可能想删除Logger.log(playerArray),因此还需要1-2个步骤.
  4. 您必须单击"确定"才能关闭叠加层(还有一次额外的点击).

相反,每当我想调试一些东西时,我都会添加断点(点击行号)并按下Debug按钮(bug图标).当您为变量赋值时,断点很有效,但是当您启动变量并希望稍后查看它时,断点不太好,这与op尝试做的类似.在这种情况下,我会通过输入"x"(x标记点!)强制中断条件以抛出运行时错误:

在此输入图像描述

与查看日志比较:

在此输入图像描述

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

  • 添加“x”与添加“debugger;”具有相同的功能 (2认同)

Tan*_*pta 6

在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,使用语法<?...?>,执行代码而不明确地向页面输出内容.


Dav*_*nes 5

2020 年更新

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

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

快乐编码!