1.0.0 • Published 1 year ago

@byndyusoft/nest-logger v1.0.0

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
1 year ago

nest-logger

npm@latest test code style: prettier semantic-release

Logger factory for pino with module logger for NestJs

Requirements

  • Node.js v20 LTS or later
  • npm or yarn

Install

npm install @byndyusoft/nest-logger @byndyusoft/nest-dynamic-module

or

yarn add @byndyusoft/nest-logger @byndyusoft/nest-dynamic-module

Environment

You must initialize process.env before creating pino logger:

process.env.npm_package_name;
process.env.npm_package_version;
process.env.CONFIG_ENV ?? process.env.NODE_ENV;
process.env["BUILD_*"];

Usage

Ready-to-use module

Register instance Logger and LoggerErrorInterceptor

import { Logger, LoggerErrorInterceptor } from "@byndyusoft/nest-logger";

const logger = app.get(Logger);
app.useLogger(logger);
app.useGlobalInterceptors(new LoggerErrorInterceptor());

Register module LoggerModule

import { LoggerModule, LogLevel, Disable } from "@byndyusoft/nest-logger";

@Module({
  imports: [
    LoggerModule.forRoot({
      base: {
        configEnv: "local",
        name: "root",
        version: "0.0.0-development",
      },
      level: LogLevel.info,
      pretty: true,
      disable: [Disable.messageTemplateHash],
    }),
  ],
})
export class AppModule {}

Or async register module LoggerModule

import { LoggerModule } from "@byndyusoft/nest-logger";
import { ConfigDto } from "./config";
import { PackageJsonDto } from "./packageJson";

@Module({
  imports: [
    LoggerModule.forRootAsync({
      inject: [ConfigDto, PackageJsonDto],
      useFactory: (configDto: ConfigDto, packageJson: PackageJsonDto) => ({
        base: {
          configEnv: configDto.configEnv,
          name: packageJson.name,
          version: packageJson.version,
        },
        level: configDto.logger.level,
        pretty: configDto.logger.pretty,
        disable: [Disable.messageTemplateHash]
      })
    }),
  ],
})

Custom use

Create custom module

import {
  PinoHttpLoggerOptionsBuilder,
  PinoLoggerFactory,
} from "@byndyusoft/nest-logger";
import { Module } from "@nestjs/common";
import { LoggerModule } from "nestjs-pino";

@Module({
  imports: [
    LoggerModule.forRootAsync({
      useFactory: () => ({
        pinoHttp: new PinoHttpLoggerOptionsBuilder()
          .withLogger(new PinoLoggerFactory().create())
          .build(),
      }),
    }),
  ],
})
export class InfrastructureModule {}

Usage custom serializers

Configure modules

import {
  PinoHttpLoggerOptionsBuilder,
  PinoLoggerFactory,
  debugObjectSerializer,
  jsonDebugObjectSerializer,
} from "@byndyusoft/nest-logger";
import { Module } from "@nestjs/common";
import { LoggerModule } from "nestjs-pino";

@Module({
  imports: [
    LoggerModule.forRootAsync({
      useFactory: () => ({
        pinoHttp: new PinoHttpLoggerOptionsBuilder()
          .withLogger(new PinoLoggerFactory().create())
          .withSerializers({
            // you can use any name for key
            debugData: debugObjectSerializer,
            debugJsonData: jsonDebugObjectSerializer,
          })
          .build(),
      }),
    }),
  ],
})
export class InfrastructureModule {}
logger.info({
  msg: "some message",
  // the object whose fields you want to serialize to human-readable string representation
  debugData: {
    entity: {
      id: 1,
      orders: [1, 2],
    },
  },
  // the object whose fields you want to serialize to JSON string representation
  debugJsonData: {
    entity: {
      id: 1,
      orders: [1, 2],
    },
  },
});

Maintainers

License

This repository is released under version 2.0 of the Apache License.