如何使用Sentry的新统一SDK发送请求信息?

时间:2019-02-26 20:52:13

标签: node.js sentry

旧版Sentry Node SDK(raven)允许通过将请求对象传递到options对象(第二个参数)中来发送HTTP请求信息以及错误:

Raven.captureException(someError, { req: req });

从文档中提取的代码行:https://docs.sentry.io/clients/node/usage/#raven-recording-breadcrumbs

这样,我们可以获得有关错误的其他上下文,例如所使用的设备。

有什么办法可以通过新的SDK传递请求对象? contextnew SDK部分说明了如何通过使用范围发送数据,例如用户标识,自定义标签等,但是那里没有请求选项。这是否意味着现在应该在tags和/或extra对象内部手动发送请求信息?

1 个答案:

答案 0 :(得分:1)

正如@MarkusUnterwaditzer分享的那样,Express集成对我有用:https://docs.sentry.io/platforms/node/express/关键部分是添加Sentry.Handlers.requestHandler()中间件,然后是errorHandler中间件,或者自己做Sentry.captureException(error)(不需要)传递{req: req})。

示例代码:

const express = require('express');
const app = express();
const Sentry = require('@sentry/node');

Sentry.init({ dsn: 'https://8f0620a3bfea4f2ca26aefb074851e23@sentry.io/280382' });

// The request handler must be the first middleware on the app
app.use(Sentry.Handlers.requestHandler());

app.get('/', function mainHandler(req, res) {
  throw new Error('Broke!');
});

// The error handler must be before any other error middleware
app.use(Sentry.Handlers.errorHandler());

// Optional fallthrough error handler
app.use(function onError(err, req, res, next) {
  // The error id is attached to `res.sentry` to be returned
  // and optionally displayed to the user for support.
  res.statusCode = 500;
  res.end(res.sentry + '\n');
});

app.listen(3000);