Очень медленные "журналы" с Google Apps Script V8 против Rhino? - PullRequest
7 голосов
/ 26 февраля 2020

При использовании Rhino в диалоговом окне «Журналы» («команда + Ввод» или «Журналы из меню« Вид ») отображаются журналы мгновенно. Однако в тестовых проектах, использующих движок V8, для загрузки даже самых простых журналов требуется 10-20 секунд, с сообщением «Ожидание журналов, пожалуйста, подождите ...» *

Оба, «Logger.log» или « console.log "медленно загружают логи. Кто-нибудь еще испытывает такую ​​же медлительность? Ожидается ли это с новым двигателем?

Заранее спасибо!

Вот базовая функция c, которую я использовал для тестирования:

function logTest() {
 Logger.log("log test");
}

Ответы [ 4 ]

2 голосов
/ 26 февраля 2020

Я заметил ту же вещь, и в ней уже есть проблема.

Я использовал приведенный ниже скрипт. Это, вероятно, не пуленепробиваемый, но для меня это лучше, чем ждать бревно. Я также замечаю, что если у вас есть ошибка и go для просмотра выполнений, то, по-видимому, журналы появляются там сейчас, даже до того, как мы получим их в редакторе сценариев.

Ссылка на выпуск: https://issuetracker.google.com/issues/149519063

function MyLogger(s,t=5) {
  const cs=CacheService.getScriptCache();
  const cached=cs.get("Logger");
  const ts=Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "yy/MM/dd HH:mm:ss")
  if(cached) {
    var v=Utilities.formatString('%s<br />[%s] - %s',cached,ts,s);   
  }else{
    var v=Utilities.formatString('[%s] - %s',ts,s);
  }
  cs.put("Logger",v,t);
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(v), 'My Logger');
}

Другая версия MyLogger ():

function MyLogger(s,d=true,w=800,h=400,t=5) {
  const cs=CacheService.getScriptCache();
  const cached=cs.get("Logger");
  const ts=Utilities.formatDate(new Date(), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "MM|dd|HH:mm:ss")
  if(cached) {
    var v=Utilities.formatString('%s<br />[%s] - %s',cached,ts,s);   
  }else{
    var v=Utilities.formatString('[%s] - %s',ts,s);
  }
  cs.put("Logger",v,t);
  //allows logging without displaying.
  if(d) {
    const a='<br /><input type="button" value="Exit" onClick="google.script.host.close();" />';
    const b='<br /><input type="button" value="Exit" onClick="google.script.host.close();" /><br />';
    SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(b+v+a).setWidth(w).setHeight(h), 'My Logger');
  }
}
1 голос
/ 05 апреля 2020

Я сделал некоторые изменения в @blueSkys Code

const log=(...data)=>{
data.unshift(new Date()); SpreadsheetApp.openById('1E9s2vI21eRlcnoqaVAF4wCUm4Ojn2Lpv62TM6Xw17Z4').getSheetByName('log').appendRow(data);
}

Также создано видео для подробного руководства

https://youtu.be/JQpbB5lR4eY

Спасибо

1 голос
/ 30 марта 2020

Еще один простой подход для настраиваемого регистратора (для листов) - определить эту функцию для записи в лист 'log'

const log=(...items)=>{
  SpreadsheetApp.getActive().getSheetByName("log").appendRow(items)
}

и, получив лист с именем log, он добавит аргументы в ячейки новая строка, когда вызывается как

log(1,0,2,"a","b", "etc")

, также имеет преимущество в создании журнала при вызове через выполнение веб-приложения (которое, насколько я могу судить, казалось, не вызывает Logger извлекаемым способом).

0 голосов
/ 26 апреля 2020

Спасибо за понимание, приведенный ниже код хорошо работает в GAS:

/**
 * @description Class: Logger helper, writes log information to tab sheet 'log' for the active spreadsheet 
 * @tutorial https://stackoverflow.com/questions/24342748/why-does-console-log-say-undefined-and-then-the-correct-value
 * @param N/A
 * @return {Object}
 */
class ConsoleX {
  constructor(){
    this.setSS('**** Log Initialized ****');
    this.timeStart = 0;
    this.timerBase = {};
  };
  
  log(...data){
    let dataY = '';
    data.forEach(c => {
      dataY += c;
    })
    this.setSS(`${[dataY]}`);
    Logger.log(`${[dataY]}`);
  };
  
  setSS(data){
    data = [data];
    data.unshift(new Date());
    SpreadsheetApp.getActive().getSheetByName(logFileName).appendRow(data);
  };
  
  getLogs(dataX){
    this.setSS(`${[dataX]}\n${Logger.getLog()}`);
  }

  time(data = 'base1'){
    let dateX = new Date();
    this.timerBase[data] = dateX.getTime();
  };
  
  timeEnd(data = 'base1'){
    let dateX = new Date();
   this.log(`${data}: ${(dateX.getTime() - this.timerBase[data])/1000}(ms)`);
  
  };
  
  clear() {
  SpreadsheetApp.getActive().getSheetByName(logFileName).clear({contentsOnly: true});
}
  
};// END ConsoleX


/**
 * @description Function: Test logging methods 
 * @tutorial https://stackoverflow.com/questions/24342748/why-does-console-log-say-undefined-and-then-the-correct-value
 * @param AS PER METHOD
 * @return {undefine}
 */
function testLog(){
  let testdata = {name:'hello', value:'world'};
  Logger.log('From Logger: ', testdata);
  test = new ConsoleX();
  test.time('**** Time')
  test.log('**** Standard Log: HELLO WORLD');
  test.log('**** Templating Log: THIS IS GOOD: ', 10*10, ` and ${100/2}`);
  test.getLogs('**** Logger Historical Data: Looking Good :)');
  test.getLogs();
  test.timeEnd('**** Time')
};

function testClear(){
  test = new ConsoleX();
  test.clear();

};

enter image description here

...