nestjs-pino-logger
v0.1.0
Published
A NestJS logger utilizing pino
Downloads
2,745
Readme
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();