Использование отчета об ошибках Google Cloud Platform с ExpressJS

Я переключил свое приложение ExpressJS с Heroku на Google App Engine.
Теперь все работает нормально.
Но мне интересно, как отладить мое приложение, если возникнут какие-то исключения на GAE.
На heroku я могу выполнить heroku logs -t для трассировки ошибки. Я также могу проверить переменную, напечатанную console.error(var).
Однако я не знаю, как сделать то же самое на GAE.

Я проверил ведение журнала драйвера стека, кажется, что он показывает только некоторую информацию о каждом HTTP-запросе вместо подробных журналов, таких как heroku.
Я обнаружил, что существует служба отчетов об ошибках драйвера стека. Это может быть то, что я хочу.
Вот руководство, в котором рассказывается, как настроить. Но эти шаги меня сбивают с толку.
Есть ли у кого-нибудь опыт настройки отчетов об ошибках?
Я нахожу более четкие шаги по настройке.
Большое спасибо и признательность!


comment
Отчеты об ошибках Stackdriver все еще находятся в стадии бета-тестирования, и мы прилагаем все усилия, чтобы улучшить процесс установки. В дополнение к инструкции по настройке, которую я предоставил, мы тестируем конечную точку HTTP API для отправки ошибок. Зарегистрируйтесь здесь, если вы хотите стать альфа-тестером: docs.google.com/forms/d/   -  person Steren    schedule 31.05.2016


Ответы (2)


Для отчетов об ошибках Stackdriver:

Вы можете использовать код, аналогичный тому, который рекомендуется для Google Compute Engine: https://cloud.google.com/error-reporting/docs/setup/compute-engine#send_exception_data

Вот что сработало для меня при использовании Express и Winston в гибкой среде App Engine:

var winston = require('winston');
winston.add(winston.transports.File, { filename: '/var/log/app_engine/custom_logs/my.errors.json' });

var report = function (err, req) {
  var payload = {
    serviceContext: {
      service: 'my service',
    },
    message: err.stack,
    context: {
      httpRequest: {
        url: req.originalUrl,
        method: req.method,
        referrer: req.header('Referer'),
        userAgent: req.header('User-Agent'),
        remoteIp: req.ip,
        responseStatusCode: 500,
      }
    }
  };
  winston.error (payload);
};

// Handle errors
app.use(function (err, req, res, next) {
  report(err, req);
  res.status(500).send(err.response || 'Something broke!');
});

Для ведения журнала Stackdriver:

Действительно, request_log содержит только записи журнала HTTP-запросов в App Engine flex. Посмотрите в журнал stdout, чтобы увидеть вывод вашего приложения.

person Steren    schedule 31.05.2016
comment
Спасибо, код делает учебник более понятным. Я еще не тестировал код. Но я думаю, что я хочу. - person Calvin Jeng; 31.05.2016

Если вы просто хотите прочитать данные из журналов, вы можете попробовать:

$ gcloud preview app logs read 
2016-05-30 18:46:29 default[alpha2]  saved to datastore: mountain biking
2016-05-30 18:46:29 default[alpha2]  saved to datastore: adventure
2016-05-30 18:46:29 default[alpha2]  saved to datastore: mountain bike
2016-05-30 18:46:29 default[alpha2]  saved to datastore: cycle sport
person Brad Abrams    schedule 30.05.2016
comment
Спасибо за помощь. Но похоже, что журналы, которые он печатает, такие же, как журналы службы ведения журналов в Stack Driver в Google Cloud. - person Calvin Jeng; 31.05.2016