bd-logging-interceptor v1.1.15
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",
];
}
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago