Jeremy Schaffer
Jeremy Schaffer

Reputation: 456

Does anyone know how to implement Honeybadger logging in NestJS?

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

Answers (1)

Jonas
Jonas

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

Related Questions