nestjs-sensitive-logger
v0.0.21
Published
Nestjs sensitive data logger
Downloads
25
Readme
Installation
$ npm install nestjs-sensitive-logger
Usage
- Create a file named logger under your project directory
import {INestApplication} from '@nestjs/common';
import {
HttpLoggingInterceptor,
StrategyMapper,
} from 'nestjs-sensitive-logger';
import {LoggerConfig} from 'nestjs-sensitive-logger/modals';
import {StrategyType} from 'nestjs-sensitive-logger/masker/modals';
class MyCustomStrategyMapper extends StrategyMapper {
constructor() {
super();
// assign a masking strategy for a field(userName) which is already located in mapper
super.upsert('userName', StrategyType.STATIC);
// update a masking strategy for a field(identityNo) which is located in mapper
super.upsert('identityNo', StrategyType.EACH);
// remove a default masking strategy for selected field
super.delete('firstName');
}
}
export const addLogger = (app: INestApplication) => {
const config: LoggerConfig = {
masking: true, // default is false
appName: 'my-custom-app-name', // default name is "process.env.npm_package_name"
useNestjsLogger: true, // default is false
maskingConfig: {
map: new MyCustomStrategyMapper(),
},
};
const loggingInterceptor = new HttpLoggingInterceptor(config);
app.useGlobalInterceptors(loggingInterceptor);
};
- Insert "addLogger" function and call it with "app" context.
import {NestFactory} from '@nestjs/core';
import {AppModule} from './app.module';
import {addLogger} from '../utils/logger';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
addLogger(app);
await app.listen(3000);
}
bootstrap();
Log Pattern
Format: Timestamp|TraceId|Severity|Server Name|Server IP|Method|Endpoint|Client IP| Client ID|Body|Attr
- Timestamp: Time when the event occurred.
- TraceId: Request trace id.
- AppName: The application that is logging the record.
- Severity: Severity(info, warn, error, debug, fatal) of log
- Server Name: Name of microservice that logs
- Server IP: IP address of Server
- Method: The http method type of request
- Endpoint: The endpoint that was called
- Client IP: IP address of Client device
- Client ID: Colendi ID
- Body: The response body of the log record.
- Attributes: Additional information about the request.I.E. request body
By Default Masker Strategy Map (Every field name will be normalized)
| Field | Masking Strategy | |-----------|-----------------------| | password | StrategyType.PASSWORD | | email | StrategyType.EMAIL | | firstname | StrategyType.NAME | | surname | StrategyType.NAME | | phone | StrategyType.PHONE | | pan | StrategyType.PAN | | cvv | StrategyType.EACH | | identityno | StrategyType.EACH |
Deploying npm package (Npm Registery credentials are required for this step)
$ rimraf dist && npx tsc
$ cp README.md dist/src && cp package.json dist/src
$ cd dist/src
$ npm publish