1.1.15 • Published 2 years ago

bd-logging-interceptor v1.1.15

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years 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

2 years ago

1.1.9

2 years ago

1.1.8

2 years ago

1.1.12

2 years ago

1.1.11

2 years ago

1.1.10

2 years ago

1.1.14

2 years ago

1.1.13

2 years ago

1.1.7

2 years ago

1.1.6

2 years ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.15

2 years ago

1.0.14

2 years ago

1.0.13

2 years ago

1.0.12

2 years ago

1.0.11

2 years ago

1.0.10

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago