将 Google Cloud Platform 的错误报告与 ExpressJS 一起使用

Posted

技术标签:

【中文标题】将 Google Cloud Platform 的错误报告与 ExpressJS 一起使用【英文标题】:Using Error report of Google Cloud Platform with ExpressJS 【发布时间】:2016-05-30 10:25:31 【问题描述】:

我将ExpressJS 应用程序从Heroku 切换到Google App Engine。 现在一切正常。 但我很好奇如果GAE 发生一些异常,如何调试我的应用程序。 在heroku 上,我可以使用heroku logs -t 来跟踪错误。我也可以查看console.error(var) 打印的变量。 但是,我不知道如何在GAE 上做同样的事情。

我检查了 Stack Driver 的日志,它似乎只显示了每个 HTTP 请求的一些信息,而不是像 heroku 这样的详细日志。 发现Stack Driver有报错服务。这可能是我想要的。 这是tutorial 告诉我们如何设置。但是这些步骤让我感到困惑。 有没有人有设置错误报告的经验? 我正在寻找更清晰的设置步骤。 非常感谢和赞赏!

【问题讨论】:

Stackdriver 错误报告仍处于测试阶段,我们正在努力改善设置体验。除了我提供的设置指令之外,我们正在测试 HTTP API 端点以发送错误,如果您想成为 alpha 测试人员,请在此处注册:docs.google.com/forms/d/… 【参考方案1】:

对于 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 日志以查看应用程序的输出。

【讨论】:

谢谢,代码使教程更清晰。我还没有测试代码。但我认为这就是我想要的。【参考方案2】:

如果你只是想从日志中读取数据,你可以试试:

$ 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

【讨论】:

感谢您的帮助。但它打印的日志似乎与 Google Cloud Stack Driver 中的日志服务日志相同。

以上是关于将 Google Cloud Platform 的错误报告与 ExpressJS 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何将 gitlab 存储库自动部署到 Google Cloud Platform?

如何将 Google Cloud Platform Pub/Sub 消息推送到 C# 桌面应用程序

如何将本地训练的 TensorFlow 图形文件部署到 Google Cloud Platform?

将 Google Cloud Platform 项目从一个帐户移动到另一个帐户

在 Google Cloud Platform 中将永久性磁盘挂载到 /home

使用新的 Google Cloud 日志记录 jar 时,日志未显示在 Google Cloud Platform Stackdriver 中