// Import this first!
import "./instrument";
// Now import other modules
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
Afterwards, add the SentryModule
as a root module to your main module:
import { Module } from "@nestjs/common";
import { SentryModule } from "@sentry/nestjs/setup";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
@Module({
imports: [
SentryModule.forRoot(),
// ...other modules
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
If you're using a global catch-all exception filter (which is either a filter registered with app.useGlobalFilters()
or a filter registered in your app module providers annotated with a @Catch()
decorator without arguments), add a @SentryExceptionCaptured()
decorator to the filter's catch()
method.
This decorator will report all unexpected errors that are received by your global error filter to Sentry:
import { Catch, ExceptionFilter } from '@nestjs/common';
import { SentryExceptionCaptured } from '@sentry/nestjs';
@Catch()
export class YourCatchAllExceptionFilter implements ExceptionFilter {
@SentryExceptionCaptured()
catch(exception, host): void {
// your implementation here
}
}
{/* TODO(v9): Remove this note */}
Note that @SentryExceptionCaptured()
was called @WithSentry
in SDK versions 8.38.0
and prior.
If you don't have a global catch-all exception filter, add the SentryGlobalFilter
to the providers of your main module.
This filter will report any unhandled errors that aren't caught by other error filters to Sentry.
Important: The SentryGlobalFilter
needs to be registered before any other exception filters.
import { Module } from "@nestjs/common";
import { APP_FILTER } from "@nestjs/core";
import { SentryGlobalFilter } from "@sentry/nestjs/setup";
@Module({
providers: [
{
provide: APP_FILTER,
useClass: SentryGlobalFilter,
},
// ..other providers
],
})
export class AppModule {}
Note: In NestJS + GraphQL applications replace the SentryGlobalFilter
with the SentryGlobalGraphQLFilter
.
By default, exceptions with status code 4xx are not sent to Sentry. If you still want to capture these exceptions, you can do so manually with Sentry.captureException()
:
import { ArgumentsHost, BadRequestException, Catch } from '@nestjs/common';
import { BaseExceptionFilter } from '@nestjs/core';
import { ExampleException } from './example.exception';
import * as Sentry from '@sentry/nestjs';
@Catch(ExampleException)
export class ExampleExceptionFilter extends BaseExceptionFilter {
catch(exception: unknown, host: ArgumentsHost) {
Sentry.captureException(exception);
return super.catch(new BadRequestException(exception.message), host)
}
}