Reputation: 456
NestJS uses express and Honeybadger has an express middleware but I can't seem to figure out how to implement it. Currently my main.ts file looks like this
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ConfigService } from '@nestjs/config';
import * as Honeybadger from 'honeybadger';
Honeybadger.configure({
apiKey: '??hidden for security reasons??'
})
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
logger: false,
});
app.use(Honeybadger.requestHandler);
app.use(Honeybadger.errorHandler);
const configService = app.get(ConfigService);
await app.listen(configService.get('PORT'));
}
bootstrap();
Upvotes: 2
Views: 536
Reputation: 21
For anyone finding this problem at a later date I found a way that works for me.
Make a new logger that extends the ConsoleLogger
class and call Honeybadger.notify()
on error as so:
import { ConsoleLogger } from '@nestjs/common';
import * as Honeybadger from '@honeybadger-io/js';
export class CustomLogger extends ConsoleLogger {
error(message: any, stack?: string, context?: string) {
Honeybadger.notify(message);
super.error(message);
}
}
Then register your new logger for the app, configure HoneyBadger
and use it's request handler:
..
import * as Honeybadger from '@honeybadger-io/js';
import { CustomLogger } from './customLogger';
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule, {
logger: new CustomLogger(),
});
Honeybadger.configure({ apiKey: process.env.HONEYBADGER_API_KEY });
app.use(Honeybadger.requestHandler);
//Listen on port 3000
await app.listen(3000);
}
bootstrap();
Your application will notify Honeybadger
with the error message and still console log any error.
Upvotes: 2