Search code examples
node.jsdependency-injectionnestjsnest

How to inject Logger Service into exception filters


I'm working on a NestJS application and trying to inject my logger service into an ExceptionFilter. Here's my code:

@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
  constructor(private readonly loggerService: LoggerService) {}

  catch(exception: HttpException, host: ArgumentsHost) {
    ...
    this.loggerService.log(exception.message, 'error');
    ...
  }
}

I've registered the HttpExceptionFilter & LoggerService in my AppModule like this:

@Module({
  providers: [
    LoggerService,
    {
      provide: APP_FILTER,
      useClass: HttpExceptionFilter,
    },
  ],
})
export class AppModule {}

However, when the catch method of the HttpExceptionFilter is executed, I'm getting the following error:

TypeError: Cannot read properties of undefined (reading 'log')


Solution

  • in your main file add

    
      const loggerService = await app.resolve(LoggerService);
    
      app.useGlobalFilters(
        new HttpExceptionFilter(loggerService),
      );