1.1.15 • Published 10 months ago

bd-logging-interceptor v1.1.15

Weekly downloads
-
License
MIT
Repository
-
Last release
10 months ago

BD Logging Interceptor for NestJS

BD Logging Interceptor is a logging interceptor for NestJS, designed to send logs directly to Elastic Kibana using Winston-elasticsearch.

Requirements

The bd-logging-interceptor library is compatible with the following versions:

  • @nestjs/common: ^8.0.0, ^9.0.0, or ^10.0.0
  • rxjs: ^7.0.0 or ^8.0.0

Please ensure that your project meets these requirements.

Getting Started

To get started, install the bd-logging-interceptor from npm:

npm install bd-logging-interceptor

or

yarn add bd-logging-interceptor

Usage

There are 2 ways for importing the library.

1. Import LoggerService and LoggingInterceptor from bd-logging-interceptor and configure them in your app module as follows:

import { LoggerService, LoggingInterceptor } from "bd-logging-interceptor";
import { APP_INTERCEPTOR } from "@nestjs/core";

//...

@Module({
  providers: [
    {
      provide: LoggerService,
      useValue: new LoggerService({
        esUrl: string;
        env: string;
        globalEndpoint: string;
      }),
    },
    {
      provide: APP_INTERCEPTOR,
      useValue: new LoggingInterceptor({
        esUrl: string;
        env: string;
        globalEndpoint: string;
        masking: ['password'];
      }),
    },
  ],
  //...
})
export class AppModule {}

2. Import globally in main.ts file.

import { LoggingInterceptor } from 'bd-logging-interceptor';

//...

app.useGlobalInterceptors(new LoggingInterceptor({
    esUrl: process.env.ELASTIC_COMMON_URL,
    globalEndpoint: appConfig.globalEndpoint,
    env: appConfig.environment
    masking: ['password'];
}));

Log customization

In order to customize logs for Kafka, Redis etc., it is possible by the following the instruction below.

// user.module.ts

//...
import { LoggerService } from 'bd-logging-interceptor';

//...
@Module({
    imports: //[...required modules],
    controllers: //[...required controllers],
    providers: [
        //...required services
        {
            provide: LoggerService,
            useFactory: () => {
                return new LoggerService({
                    esUrl: process.env.ELASTIC_COMMON_URL,
                    globalEndpoint: process.env.GLOBAL_ENDPOINT,
                    env: process.env.NODE_ENV
                });
            },
        },
    ],
})

In the user.service.ts file,

// user.service.ts

import { LoggerService } from 'bd-logging-interceptor';

//...

constructor(
  //...
  private readonly loggerService: LoggerService,
  //...
) {
}

//...
this.loggerService.info(`[Kafka]\nConsumed from ${topic} \n${funcName} called`, logPayloads);

Configuration

For Logger Service config and Logging Interceptor config, you can use the following interfaces:

interface LoggerConfig {
  globalEndpoint: process.env.GLOBAL_ENDPOINT;
  esUrl: process.env.ELASTIC_COMMON_URL;
  env: process.env.NODE_ENV;
}

interface LoggingInterceptorConfig {
  globalEndpoint: process.env.GLOBAL_ENDPOINT;
  env: process.env.NODE_ENV;
  masking?: string[] | null | undefined;
}

Masking

The mask property can be an array of strings(field name), null or undefined.

  • If it's an array of strings, it'll mask data in the field name.
  • If it's null, undefined or not provided, it'll not mask any data.

Here's an example of an array of masking field name:

{
  globalEndpoint: process.env.GLOBAL_ENDPOINT;
  env: process.env.NODE_ENV;
  masking: [
    "password",
    "accessToken",
    "refreshToken",
    "sof_support[0].icon_url",
  ];
}
1.1.15

10 months ago

1.1.9

10 months ago

1.1.8

10 months ago

1.1.12

10 months ago

1.1.11

10 months ago

1.1.10

10 months ago

1.1.14

10 months ago

1.1.13

10 months ago

1.1.7

10 months ago

1.1.6

10 months ago

1.1.5

10 months ago

1.1.4

10 months ago

1.1.3

10 months ago

1.1.2

10 months ago

1.1.1

10 months ago

1.1.0

10 months ago

1.0.15

10 months ago

1.0.14

10 months ago

1.0.13

10 months ago

1.0.12

10 months ago

1.0.11

10 months ago

1.0.10

10 months ago

1.0.9

10 months ago

1.0.8

10 months ago

1.0.7

10 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago