Saltar al contenido

Cómo depurar Google Apps Script (también conocido como ¿dónde se registra Logger.log?)

Traemos la mejor solución que hemos encontrado online. Nosotros deseamos que te sirva de ayuda y si puedes compartir cualquier detalle que nos pueda ayudar a crecer hazlo libremente.

Solución:

ACTUALIZAR:

Como está escrito en esta respuesta,

  • Stackdriver Logging es el método preferido de registro ahora.

  • Utilizar console.log() para iniciar sesión en Stackdriver.


Logger.log le enviará un correo electrónico (eventualmente) con los errores que han ocurrido en sus scripts o, si está ejecutando cosas desde el Script Editorpuede ver el registro de la última función de ejecución yendo a View->Logs (todavía en el editor de secuencias de comandos). Nuevamente, eso solo le mostrará todo lo que se registró desde la última función que ejecutó desde adentro Script Editor.

La secuencia de comandos que estaba tratando de hacer funcionar tenía que ver con hojas de cálculo: hice una hoja de cálculo tipo lista de tareas pendientes que ordenaba los elementos por prioridades y demás.

Los únicos activadores que instalé para ese script fueron los activadores onOpen y onEdit. La depuración del activador onEdit fue la más difícil de entender, porque seguía pensando que si establecía un punto de interrupción en mi función onEdit, abría la hoja de cálculo, editaba una celda, mi punto de interrupción se activaría. Este no es el caso.

Para simular haber editado una celda, hizo Sin embargo, terminará teniendo que hacer algo en la hoja de cálculo real. Todo lo que hice fue asegurarme de que la celda que quería que se tratara como “editada” estuviera seleccionada, luego en Script EditorYo iria a Run->onEdit. Entonces mi punto de ruptura sería alcanzado.

Sin embargo, tuve que dejar de usar el argumento de evento que se pasa a la función onEdit; no puede simular eso haciendo Run->onEdit. Cualquier información que necesitaba de la hoja de cálculo, como qué celda se seleccionó, etc., tenía que averiguarlo manualmente.

De todos modos, respuesta larga, pero finalmente lo descubrí.


EDITAR:

Si desea ver la lista de verificación de tareas que hice, puede consultarla aquí

(sí, sé que cualquiera puede editarlo, ¡ese es el punto de compartirlo!)

Esperaba que también te dejara ver el guión. Como no puedes verlo allí, aquí está:

function onOpen() 
  setCheckboxes();
;

function setCheckboxes() 
  var checklist = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("checklist");
  var checklist_data_range = checklist.getDataRange();
  var checklist_num_rows = checklist_data_range.getNumRows();
  Logger.log("checklist num rows: " + checklist_num_rows);

  var coredata = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("core_data");
  var coredata_data_range = coredata.getDataRange();

  for(var i = 0 ; i < checklist_num_rows-1; i++)  ");
    var item_id = split[split.length - 1];
    if(item_id != "") 
      item_id = parseInt(item_id);
      Logger.log("setting value at ("+(i+2)+",2) to " + coredata_data_range.getCell(item_id+1, 3).getValue());
      checklist_data_range.getCell(i+2,2).setValue(coredata_data_range.getCell(item_id+1, 3).getValue());
    
  


function onEdit() 
  Logger.log("TESTING TESTING ON EDIT");
  var active_sheet = SpreadsheetApp.getActiveSheet();
  if(active_sheet.getName() == "checklist")  active_range.getCell(1,1).getValue() == "?")  ");
      var item_id = splits[splits.length-1];
      Logger.log("item_id: " + item_id);

      var core_data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("core_data");
      var sheet_data_range = core_data.getDataRange();
      var num_rows = sheet_data_range.getNumRows();
      var sheet_values = sheet_data_range.getValues();
      Logger.log("num_rows: " + num_rows);

      for(var i = 0; i < num_rows; i++) 
        Logger.log("sheet_values[" + (i) + "][" + (8) + "] = " + sheet_values[i][8]);
        if(sheet_values[i][8] == item_id) 
          Logger.log("found it! tyring to set it...");
          sheet_data_range.getCell(i+1, 2+1).setValue(active_range.getCell(1,1).getValue());
        
      

    
  

  setCheckboxes();
;

Por lo que puedo decir, no puede depurar un evento en vivo desde Google Docs, por lo que debe hacerlo desde el depurador, lo cual no tiene sentido ya que el argumento del evento pasado a mi función onEdit() siempre estará indefinido si ejecuto desde el Editor de secuencias de comandos.

Cierto, así que defina el argumento del evento usted mismo para la depuración. Consulte ¿Cómo puedo probar una función de disparo en GAS?

Estaba tratando de usar el método Logger.log para registrar algunos datos cada vez que se llama a la función onEdit, pero esto también parece que solo funciona cuando se ejecuta desde el Editor de secuencias de comandos. Cuando lo ejecuto desde el Editor de secuencias de comandos, puedo ver los registros yendo a Ver->Registros...

Cierto de nuevo, pero hay ayuda. La biblioteca BetterLog de Peter Hermann redirigirá todos los registros a una hoja de cálculo, lo que permitirá el registro incluso desde el código que no está adjunto a una instancia del editor/depurador.

Si está codificando en una secuencia de comandos contenida en una hoja de cálculo, por ejemplo, puede agregar solo esta línea en la parte superior de su archivo de secuencia de comandos, y todos los registros irán a una hoja de "Registros" en la hoja de cálculo. No se necesita otro código, solo use Logger.log() como lo harías normalmente:

Logger = BetterLog.useSpreadsheet();

Actualización de 2017:
Stackdriver Logging ahora está disponible para Google Apps Script. Desde la barra de menú en el editor de secuencias de comandos, vaya a:
View > Stackdriver Logging para ver o transmitir los registros.

console.log() escribirá DEBUG mensajes de nivel

Ejemplo onEdit() Inicio sesión:

function onEdit (e) 
  var debug_e = 
    authMode:  e.authMode,  
    range:  e.range.getA1Notation(),    
    source:  e.source.getId(),
    user:  e.user,   
    value:  e.value,
    oldValue: e. oldValue
  

  console.log(message: 'onEdit() Event Object', eventObject: debug_e);

Luego revisa los registros en la interfaz de usuario de Stackdriver etiquetados onEdit() Event Object para ver la salida

Te mostramos comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *