大家好,你好吗?由于Sentry没有对Nestjs框架的本机支持,因此我创建了有关如何集成它的分步指南。有一些使用Nest的拦截器使用的教程,但是正确的方法是使用异常,因为Sentry仅捕获异常,并且它使代码更容易和更易于配置ð
1。首先,在nodejs
中创建一个项目2。保存在DNS部分中生成的URL:
3。安装依赖项
yarn add @sentry/node @sentry/tracing
// or
npm install @sentry/node @sentry/tracing
4。在包含项目URL的.env文件中包含一个sentry_dns键:
生成项目后,使用步骤2中获得的URL
SENTRY_DNS=https://xxx@xxx.ingest.sentry.io/xxx
5。创建一个异常
我们将创建 exceptionfilter 内巢中。为此,在src文件夹中包含一个名为sentry.filter.ts的文件,其中包含以下内容:
import { Catch, ArgumentsHost } from '@nestjs/common';
import { BaseExceptionFilter } from '@nestjs/core';
import * as Sentry from '@sentry/node';
@Catch()
export class SentryFilter extends BaseExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
Sentry.captureException(exception);
super.catch(exception, host);
}
}
我们正在生成通用 exceptionfilter ,它捕获任何类型的 exception ,因为 <> > @catch() 装饰器是空的。另外,我们将其从 baseexceptionfilter 进行扩展,这是Nest的默认类用于处理异常。因此,当抛出异常时,我们不会更改原始行为,因为在代码末尾处理了处理异常的父类方法: super.catch(exception,host); em>
6。在Nest的Main.ts
中包括哨兵脚本现在只需调用哨兵初始化方法,并导入全球创建的 exceptionfilter 在您的 main.ts.ts 文件中 bootstrap() 方法:
// other importers
import { HttpAdapterHost, NestFactory } from '@nestjs/core';
import * as Sentry from '@sentry/node';
import { SentryFilter } from './filters/sentry.filter';
async function bootstrap() {
// …
// Initialize Sentry by passing the DNS included in the .env
Sentry.init({
dsn: process.env.SENTRY_DNS,
});
// Import the filter globally, capturing all exceptions on all routes
const { httpAdapter } = app.get(HttpAdapterHost);
app.useGlobalFilters(new SentryFilter(httpAdapter));
// …
}
bootstrap();
完成!配置完成ðð。这样,我们正在捕获系统中的所有异常,但是您可以自定义 exceptionfilter 以阻止并仅获得特定的异常。
参考
哨兵docs node.js:https://docs.sentry.io/platforms/node/
exceptionfilters nestjs:https://docs.nestjs.com/exception-filtersHi家伙,你好吗?由于Sentry没有对Nestjs框架的本机支持,因此我创建了有关如何集成它的分步指南。有一些使用Nest的拦截器使用的教程,但是正确的方法是使用异常,因为Sentry仅捕获异常,并且它使代码更容易和更易于配置ð
1。首先,在nodejs
中创建一个项目2。保存在DNS部分中生成的URL:
3。安装依赖项
yarn add @sentry/node @sentry/tracing
// or
npm install @sentry/node @sentry/tracing
4。在包含项目URL的.env文件中包含一个sentry_dns键:
生成项目后,使用步骤2中获得的URL
SENTRY_DNS=https://xxx@xxx.ingest.sentry.io/xxx
5。创建一个异常
我们将创建 exceptionfilter 内巢中。为此,在src文件夹中包含一个名为sentry.filter.ts的文件,其中包含以下内容:
import { Catch, ArgumentsHost } from '@nestjs/common';
import { BaseExceptionFilter } from '@nestjs/core';
import * as Sentry from '@sentry/node';
@Catch()
export class SentryFilter extends BaseExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
Sentry.captureException(exception);
super.catch(exception, host);
}
}
我们正在生成通用 exceptionfilter ,它捕获任何类型的 exception ,因为 <> > @catch() 装饰器是空的。另外,我们将其从 baseexceptionfilter 进行扩展,这是Nest的默认类用于处理异常。因此,当抛出异常时,我们不会更改原始行为,因为在代码末尾处理了处理异常的父类方法: super.catch(exception,host); em>
6。在Nest的Main.ts
中包括哨兵脚本现在只需调用哨兵初始化方法,并导入全球创建的 exceptionfilter 在您的 main.ts.ts 文件中 bootstrap() 方法:
// other importers
import { HttpAdapterHost, NestFactory } from '@nestjs/core';
import * as Sentry from '@sentry/node';
import { SentryFilter } from './filters/sentry.filter';
async function bootstrap() {
// …
// Initialize Sentry by passing the DNS included in the .env
Sentry.init({
dsn: process.env.SENTRY_DNS,
});
// Import the filter globally, capturing all exceptions on all routes
const { httpAdapter } = app.get(HttpAdapterHost);
app.useGlobalFilters(new SentryFilter(httpAdapter));
// …
}
bootstrap();
完成!配置完成ðð。这样,我们正在捕获系统中的所有异常,但是您可以自定义 exceptionfilter 以阻止并仅获得特定的异常。
参考
哨兵docs node.js:https://docs.sentry.io/platforms/node/
exceptionfilters nestjs:https://docs.nestjs.com/exception-filters