script que logs logger log hace google app javascript google-apps-script console.log

javascript - que - logs google app script



Imprimir en la consola en Google Apps Script? (5)

Respondiendo a las preguntas OP

A) ¿Qué no entiendo acerca de cómo funciona la consola de Google Apps Script con respecto a la impresión para que pueda ver si mi código está logrando lo que me gustaría?

El código en archivos .gs de un proyecto de Google Apps Script se ejecuta en el servidor y no en el navegador web. La forma de registrar mensajes era usar el registrador de clase .

B) ¿Es un problema con el código?

Como decía el mensaje de error, el problema era que la console no estaba definida, pero hoy en día el mismo código generará otro error:

ReferenceError: "playerArray" no está definido. (línea 12, archivo "Código")

Esto se debe a que playerArray se define como variable local. Mover la línea de la función resolverá esto.

var playerArray = []; function addplayerstoArray(numplayers) { for (i=0; i<numplayers; i++) { playerArray.push(i); } } addplayerstoArray(7); console.log(playerArray[3])

Ahora que el código se ejecuta sin lanzar errores, en lugar de mirar la consola del navegador, debemos mirar el Stackdriver Logging. Desde la interfaz de usuario del editor de Google Apps Script, haga clic en Ver> Registro de Stackdriver .

Apéndice

En 2017, Google lanzó todas las secuencias de comandos Stackdriver Logging y agregó Class Console, por lo que incluir algo como console.log(''Hello world!'') No arrojará un error, pero el registro estará en el servicio de registro de Stackdriver de Google Cloud Platform en lugar del navegador consola.

De Google Apps Script Release Notes 2017

23 de junio de 2017

Stackdriver Logging se ha eliminado de Early Access. Todos los scripts ahora tienen acceso al registro de Stackdriver.

Desde el registro> Stackdriver logging

El siguiente ejemplo muestra cómo usar el servicio de console para registrar información en 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. }

Soy muy nuevo en la programación (he tomado algunos de los cursos de JS en Codecademy). Intento crear un script simple para determinar, si se le da una hoja de cálculo con los resultados de un juego de póker, quién debe pagarle a quién. Abrí Google Apps Script y escribí lo siguiente para comenzar:

function addplayerstoArray(numplayers) { var playerArray = []; for (i=0; i<numplayers; i++) { playerArray.push(i); } } addplayerstoArray(7); console.log(playerArray[3])

La idea es crear una matriz con el número total de jugadores en ella. Al ejecutar el código, pensé que imprimiría "3" en la consola. Pero nada pasó. Decía

"ReferenceError:" console "no está definido."

A) ¿Qué no entiendo acerca de cómo funciona la consola de Google Apps Script con respecto a la impresión para que pueda ver si mi código está logrando lo que me gustaría?

B) ¿Es un problema con el código?


Aunque Logger.log() es técnicamente la forma correcta de mostrar algo a la consola, tiene algunas molestias:

  1. El resultado puede ser un desastre no estructurado y difícil de digerir rápidamente.
  2. Primero debe ejecutar el script, luego hacer clic en Ver / Logs, que son dos clics adicionales (uno si recuerda el atajo de teclado Ctrl + Enter).
  3. Tienes que insertar Logger.log(playerArray) , y luego de Logger.log(playerArray) probablemente quieras eliminar Logger.log(playerArray) , de ahí un adicional de 1-2 pasos más.
  4. Tienes que hacer clic en Aceptar para cerrar la superposición (otro clic adicional).

En cambio, cada vez que quiero depurar algo agrego puntos de interrupción (haga clic en el número de línea) y presiono el botón Depurar (icono de error). Los puntos de interrupción funcionan bien cuando se asigna algo a una variable, pero no tan bien cuando se inicia una variable y se quiere mirar dentro de ella en un momento posterior, que es similar a lo que la operación está tratando de hacer. En este caso, forzaría una condición de salto ingresando "x" (x marca el punto) para lanzar un error de tiempo de ejecución:

Comparar con ver los registros:

La consola de depuración contiene más información y es mucho más fácil de leer que la superposición de registros. Un beneficio menor con este método es que nunca tendrá que preocuparse por contaminar su código con un montón de comandos de registro si lo que desea es mantener el código limpio. Incluso si ingresa "x", se ve obligado a recordar eliminarlo como parte del proceso de depuración o de lo contrario su código no se ejecutará (medida de limpieza incorporada, sí).


En un proyecto de script de google, puede crear archivos html (ejemplo: index.html) o archivos gs (ejemplo: code.gs). Los archivos .gs se ejecutan en el servidor y puede usar Logger.log como describe @Peter Herrman. Sin embargo, si la función se crea en un archivo .html, se está ejecutando en el navegador del usuario y puede usar console.log. La consola del navegador Chrome se puede viewed con Ctrl Shift J en Windows / Linux o Cmd Opt J en Mac

Si desea utilizar Logger.log en un archivo html, puede usar un scriptlet para llamar a la función Logger.log desde el archivo html. Para hacerlo, insertarías <? Logger.log (algo)?> Reemplazando algo con lo que quieras iniciar sesión. Scriptlets estándar, que utilizan la sintaxis <? ...?>, ejecuta código sin mostrar contenido explícitamente en la página.


La consola no está disponible porque el código se está ejecutando en la nube, no en su navegador. En su lugar, use la clase Logger provista por GAS:

Logger.log(playerArray[3])

y luego ver los resultados en el IDE en Ver> Registros ...

Aquí hay alguna documentación sobre el registro con GAS .

Editar: 2017-07-20 La secuencia de comandos de aplicaciones ahora también proporciona Stackdriver Logging . Vea estos registros en el editor de scripts en Ver - Registros de la consola.


Solo para construir sobre la solución hacky de vinnief anterior, uso MsgBox así:

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

y actúa como un punto de quiebre, detiene la secuencia de comandos y genera la secuencia que necesita para un cuadro emergente. Me parece especialmente en Sheets, donde tengo problemas con Logger.log, esto proporciona una solución adecuada la mayoría de las veces.