2.0.7 • Published 2 years ago

@aleksdolgop/nestjs-logger v2.0.7

Weekly downloads
-
License
UNLICENSED
Repository
-
Last release
2 years ago

Nestjs custom logger module

The logger can automatically create a trace id for an asynchronous or synchronous handler. It is also possible to set your own unique identifier, for example, if it came in the request header in X-Request-Id

Install

npm i @aleksdolgop/nestjs-logger

Dependencies

  • pino
  • async_hooks
  • nestjs
  • nodejs version 16 and later

Example

Change standart nestjs logger

Logger Options

export interface LoggerOptions {
  /**
   * Makes the module global
   * @default false
   */
  isGlobal?: boolean;
  /**
   * Turn on or off logger
   * @default true
   */
  enable?: boolean;
  /**
   * log level
   * @default 'debug'
   */
  level?: 'debug' | 'info';
  /**
   * Automatically creates a traceId on the first call to the log in the nodejs handler
   * @default false
   */
  autoCreateTraceId?: boolean;
  /**
   * Service name. Add 'service' param in log
   */
  serviceName?: string;

  /**
   * disable pino, enable console log format
   * @default true
   */
  enableNativeLogger?: boolean;

  /**
   * npm date-fns format mask
   * @see https://www.npmjs.com/package/date-fns
   */
  dateFormatMask?: string;
}

main.ts

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

const isDevMode = process.env.NODE_ENV !== 'production';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    ...(!isDevMode && { logger: false }),
  });
  const logger = app.get(LoggerService);
  app.useLogger(logger);
  logger.log('Bootstrap', 'Server started');
}
bootstrap();

Configure logger

Sync configuration

app.module.ts

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { LoggerModule } from '@aleksdolgop/nestjs-logger';

const isDevMode = process.env.NODE_ENV !== 'production';

@Module({
  imports: [
    LoggerModule.forRoot({
      level: isDevMode ? 'debug' : 'info',
      serviceName: 'protocol-mtproto',
      autoCreateTraceId: true,
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

Async configuration

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { LoggerModule } from '@aleksdolgop/nestjs-logger';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: '.env',
    }),
    LoggerModule.forRootAsync({
      inject: [ConfigModule],
      useFactory: (configService: ConfigService) => {
        const serviceName = configService.get('APP_NAME');
        const env = configService.get('NODE_ENV');
        const autoCreateTraceId = configService.get<boolean>(
          'LOGGER_ENABLE_TRACE_ID',
          true,
        );
        const level = env !== 'production' ? 'debug' : 'info';
        return {
          level,
          serviceName,
          autoCreateTraceId,
        };
      },
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

Log example {"level":"info","time":1653367786531,"traceId":"4a8d43a6-24b8-426d-87c3-a8c1b096bfa9","context":"Bootstrap","service":"service-name","msg":"Server started"}