bd-logging-interceptor
v1.1.15
Published
BD Logging Interceptor is a logging interceptor for [NestJS](https://nestjs.com/), designed to send logs directly to Elastic Kibana using Winston-elasticsearch.
Downloads
60
Readme
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",
];
}