将 Google Cloud Platform 的错误报告与 ExpressJS 结合使用
Using Error report of Google Cloud Platform with ExpressJS
我将 ExpressJS
应用程序从 Heroku
切换到 Google App Engine
。
现在一切正常。
但是我很好奇如果 GAE
.
上发生一些异常如何调试我的应用程序
在 heroku
上,我可以执行 heroku logs -t
来跟踪错误。我也可以检查 console.error(var)
打印的变量。
但是,我不知道如何在 GAE
上做同样的事情。
我检查了 Stack Driver 的日志记录,它似乎只显示了每个 HTTP 请求的一些信息,而不是像 heroku
.
这样的详细日志
我发现 Stack Driver 有错误报告服务。可能是我想要的。
这是告诉我们如何设置的 tutorial。但是这些步骤让我感到困惑。
有没有人有设置错误报告的经验?
我正在寻找更清晰的设置步骤。
非常感谢和赞赏!
如果你只是想从日志中读取数据,你可以尝试:
$ 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
对于 Stackdriver 错误报告:
您可以使用类似于为 Google Compute Engine 建议的代码:https://cloud.google.com/error-reporting/docs/setup/compute-engine#send_exception_data
以下是在 App Engine 灵活环境中使用 Express 和 Winston 对我有用的方法:
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
仅包含 App Engine flex 上的 HTTP 请求日志条目。查看 stdout
日志以查看应用程序的输出。
我将 ExpressJS
应用程序从 Heroku
切换到 Google App Engine
。
现在一切正常。
但是我很好奇如果 GAE
.
上发生一些异常如何调试我的应用程序
在 heroku
上,我可以执行 heroku logs -t
来跟踪错误。我也可以检查 console.error(var)
打印的变量。
但是,我不知道如何在 GAE
上做同样的事情。
我检查了 Stack Driver 的日志记录,它似乎只显示了每个 HTTP 请求的一些信息,而不是像 heroku
.
这样的详细日志
我发现 Stack Driver 有错误报告服务。可能是我想要的。
这是告诉我们如何设置的 tutorial。但是这些步骤让我感到困惑。
有没有人有设置错误报告的经验?
我正在寻找更清晰的设置步骤。
非常感谢和赞赏!
如果你只是想从日志中读取数据,你可以尝试:
$ 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
对于 Stackdriver 错误报告:
您可以使用类似于为 Google Compute Engine 建议的代码:https://cloud.google.com/error-reporting/docs/setup/compute-engine#send_exception_data
以下是在 App Engine 灵活环境中使用 Express 和 Winston 对我有用的方法:
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
仅包含 App Engine flex 上的 HTTP 请求日志条目。查看 stdout
日志以查看应用程序的输出。