При записи в консоль внутри catch в облачной функции Google ничего не пишется - PullRequest
1 голос
/ 29 января 2020

У меня есть целый ряд работ внутри облачной функции Google. Если я запускаю скрипт локально, он выдает вывод в console, но не в облачную функцию.

// this is logged
console.error('An error');
for (var i=0; i<chunks.length; i++) {
  const work = chunks[i].map(c => createOrUpdateTable(c, timestamp));
  await Promise.all(work)
    // this is not logged
    .catch(e => console.error(e.message));
}

Я попытался поместить catch в функцию и много других вещей, но такое же поведение Как я могу получить сообщение об ошибке в журнале?

Ответы [ 3 ]

0 голосов
/ 29 января 2020

Вы должны использовать блок try/catch следующим образом:

for (var i=0; i<chunks.length; i++) {
  const work = chunks[i].map(c => createOrUpdateTable(c, timestamp));
  try {
     await Promise.all(work)
  } catch (e) {
     console.error(e.message));
     return { error: err }
  }
}
0 голосов
/ 11 февраля 2020

Я воспроизвел проблему, и я зарегистрировал ошибку, но по-другому.

Первая функция:

exports.helloError = (data, context, callback) => {
  // [START functions_helloworld_error]
  // These WILL be reported to Stackdriver Error Reporting
  console.error(new Error('I failed you'));
  console.error('I failed you', new Error('I failed you too'));
  throw new Error('I failed you'); // Will cause a cold start if not caught

  // [END functions_helloworld_error]
};

При ведении журнала в стекдрайвере это выглядит как ошибка !!

severity: "ERROR"  
 textPayload: "Error: I failed you
    at exports.helloError (/srv/index.js:4:17)
    at /worker/worker.js:783:7
    at /worker/worker.js:766:11

И со второй функцией:

exports.helloError = (data, context, callback) => {
  try{
   throw new Error('I failed you'); // Will cause a cold start if not caught
  }catch(e){
    console.log(e.message);
  };

};

Сообщается как ИНФО λ

severity: "INFO"  
 textPayload: "I failed you" 

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

0 голосов
/ 29 января 2020

Согласно официальной документации, вы можете отправить сообщение об ошибке из облачной функции в отчеты об ошибках Stackdriver:

// These WILL be reported to Stackdriver Error Reporting
console.error(new Error('I failed you'));
console.error('I failed you', new Error('I failed you too'));
throw new Error('I failed you'); // Will cause a cold start if not caught

// These will NOT be reported to Stackdriver Error Reporting
console.info(new Error('I failed you')); // Logging an Error object at the info level
console.error('I failed you'); // Logging something other than an Error object
throw 1; // Throwing something other than an Error object
callback('I failed you');
res.status(500).send('I failed you');

Сообщение об ошибках

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...