Logger
NestJS Logger for Catalist Finance projects.
Part of Catalist NestJS Modules
The logger is based on winston logger and nest-winston package.
Install
yarn add @catalist-nestjs/logger
Usage
Basic usage
import { Module } from '@nestjs/common';
import { LoggerModule, jsonTransport } from '@catalist-nestjs/logger';
@Module({
imports: [
LoggerModule.forRoot({
level: 'debug',
transports: [jsonTransport()],
}),
],
})
export class AppModule {}
Async usage
import { Module } from '@nestjs/common';
import { LoggerModule, jsonTransport } from '@catalist-nestjs/logger';
import { ConfigModule, ConfigService } from './example';
@Module({
imports: [
LoggerModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({
level: configService.get('LOG_LEVEL'),
transports: [jsonTransport()],
}),
}),
],
})
export class AppModule {}
Transports
The logger provides preconfigured console transports in json
and simple
formats. The transports can be imported from @catalist-nestjs/logger
:
import { simpleTransport, jsonTransport } from '@catalist-nestjs/logger';
Secrets cleaner
Preconfigured transports have formatter for clean secrets from logs. To use it, pass an array of secret strings to the transport options:
import { Module } from '@nestjs/common';
import { LoggerModule, simpleTransport } from '@catalist-nestjs/logger';
const PRIVATE_KEY = '0x000000000000';
const secrets = [PRIVATE_KEY];
@Module({
imports: [
LoggerModule.forRoot({
level: 'debug',
transports: [simpleTransport({ secrets })],
}),
],
})
export class AppModule {}
Secrets will be replaced with text <removed>
.
If you want to use this formatter in your custom transport, import the cleanSecrets
from @catalist-nestjs/logger
:
import { cleanSecrets } from '@catalist-nestjs/logger';
const myFormatter = winston.format.combine(
cleanSecrets({ secrets: ['some-secret'] }),
winston.format.json(),
);
const myTransport = new winston.transports.Console({
format: myFormatter,
});
Meta fields
Meta fields can be useful for adding additional fields to logs, such as blockNumber
in Ethereum bots. To add meta fields, pass a defaultMeta
to logger options:
import { Module } from '@nestjs/common';
import { LoggerModule, jsonTransport } from '@catalist-nestjs/logger';
@Module({
imports: [
LoggerModule.forRoot({
level: 'debug',
defaultMeta: {
foo: 'bar',
get baz() {
return 1 + 1;
},
},
transports: [jsonTransport()],
}),
],
})
export class AppModule {}
In this case you will see extra fields in the logs:
logger.log('some message');
Colorize
For simple
transport you can set colors for meta fields by passing fieldColors
in the transport options:
import { Module } from '@nestjs/common';
import { LoggerModule, simpleTransport } from '@catalist-nestjs/logger';
const fieldColors = { foo: 'blue' };
@Module({
imports: [
LoggerModule.forRoot({
level: 'debug',
defaultMeta: {
get block() {
return 1000;
},
},
transports: [simpleTransport({ fieldColors })],
}),
],
})
export class AppModule {}
In this case you will see blue value of block
field in the logs:
logger.log('some message');
Possible color values can be found in the winston docs.