Добавить строку онемения в скрипте приложения функцией Console.error - PullRequest
0 голосов
/ 04 марта 2019

Я использую функцию console.error () для регистрации ошибок для надстройки моих листов, созданной с помощью скрипта apps.Например:

 1   var a = null;
 2   a.toString();
 3   } catch(error) {
 4           console.error('Function_1(): ' + error); 
 5         }

Однако моя функция довольно большая, и когда я получаю сообщение об ошибке типа "can't use toString() on null", я не уверен, в чем проблема.

Я пытался использовать его с throw:

1    var a = null;
2    a.toString();   
3    } catch(error) {
4           throw 'Function_1(): '+error; 
5          }

Но затем я получаю номер строки throw: can't use toString() on null at line 4, в то время как проблема в line 2.

Я смотрел на другие темы, например: Как передать обратно произвольное сообщение об ошибке из сценариев приложений Google?

Но хорошо, он не отвечает, как предоставить правильную строкучисло.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Если вы осмотрите объект Error, error, полученный вашим catch блоком, вы можете заметить, что у него есть несколько свойств, к которым можно получить доступ:

try {
  ...
} catch (error) {
  const parts = {};
  for (var i in error) {
    parts[i] = error[i];
  }
  console.error({message: "Apps Script error object decomposition", error: error, parts: parts});
}

Пример журнала Stackdriver:

enter image description here

Таким образом, вы можете включить полную трассировку стека вашей ошибки в ваши журналы, а также в файл и строкуномер:

try {
  ...
} catch (e) {
  console.error({
    message: "An error occurred",
    errMsg: e.message,
    line: e.lineNumber,
    fileName: e.fileName,
    stackTrace: e.stack
  });

  if (<some conditions>) {
    // update message:
    e.message = "Unhandled error in so-and-so: " + e.message;
    // Re-raise with the same trace info by re-throwing it:
    throw e;
  }
}
0 голосов
/ 04 марта 2019

Использовать e.lineNumber, где e - экземпляр объекта Error.Пример:

function myFunction() {
  try {
    throw new Error('Error message');
  } catch(e) {
    console.error(e.lineNumber)
  }
}

ПРИМЕЧАНИЕ. Вместо e вы можете использовать error или любое другое имя переменной, соответствующее вашему стилю кодирования.

Связано

...