nestjs-pino-logger

A NestJS logger utilizing pino

Usage no npm install needed!

<script type="module">
  import nestjsPinoLogger from 'https://cdn.skypack.dev/nestjs-pino-logger';
</script>

README

Nestjs Pino Logger

A NestJS logger utilizing pino

Features

  • Replace the built-in NestJS logger with one utilizing pino.
  • Create a logger per-service using common configuration.
  • Automatically log request and response details using a NestJS middleware.
  • Pretty prints logs in development mode.
  • Inject a per-request logger as a controller param decorator.
  • Automatically flush extreme mode logs on an interval and on process termination.

Installation

Yarn

yarn add nestjs-pino-logger pino

NPM

npm install nestjs-pino-logger pino

Getting Started

Let's register the logger module in app.module.ts.

import { Module } from '@nestjs/common';
import { LoggerModule } from 'nestjs-pino-logger';

@Module({
  imports: [LoggerModule.forRoot()],
})
export class AppModule {}

With the logger module initialized, you can now inject LogManager as a dependency.

import { Injectable } from '@nestjs/common';
import { LogManager } from 'nestjs-pino-logger';
import { Logger } from 'pino';

@Injectable()
export class AppService {
  private readonly log: Logger;

  constructor(logManager: LogManager) {
    this.log = logManager.getLogger(AppService);
  }

  getHello(): string {
    this.log.info('fetching greeting');

    return 'Hello World!';
  }
}

In controllers, the @Log param decorator can be used to inject a per-request logger.

import { Controller, Get } from '@nestjs/common';
import { Log } from 'nestjs-pino-logger';
import { Logger } from 'pino';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(@Log() log: Logger): string {
    log.info('logging from AppController.getHello');
    return this.appService.getHello();
  }
}

If you want to replace the built-in NestJS logger, that can be done in main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Logger } from 'nestjs-pino-logger';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    logger: new Logger(),
  });
  await app.listen(3000);
}
bootstrap();