@qiwi/nestjs-enterprise-logger

@qiwi/nestjs-enterprise-logger

Nestjs module for logging based on winston

Installation

Following packages should be installed before

yarn add @qiwi/nestjs-enterprise-logger

Configuration

Import

import { 
LoggerModule,
createMetaPipe,
maskerLoggerPipeFactory,
} from '@qiwi/nestjs-enterprise-logger'

@Module({
imports: [
ConfigModule,
LoggerModule.register(createMetaPipe(), maskerLoggerPipeFactory()),
// and so on
]
})

export class AppModule {}

Usage

  @Injectable()
class MyService {
constructor(@Inject('ILogger') private logger: ILogger) {}
myError() {
this.logger.error('foo')
}
myInfo() {
this.logger.info('foo')
}

}

For createMetaPipe

import {
logger as log,
} from '@qiwi/nestjs-enterprise-logger'

async function bootstrap() {
const app = await NestFactory.create(AppModule)
const logger = app.get('ILogger')
app
.use(log({ logger }))
.useLogger(logger)

//...
logger.info()

Customization

You can inject functions of type TLoggerPipe as your own pipes when create LoggerService or register LoggerModule. Your pipes will be inserted in the following order:

  • mdc pipe from @qiwi/logwrap;
  • app pipe (adds app name, app version and os info to log entry);
  • your own pipe;
  • ...
  • your own pipe;
  • logger pipe (prints log entry).

API

Class LoggerModule

Exports LoggerService with token ILogger

register (...pipes: TLoggerPipe[]): DynamicModule

Class LoggerService

constructor(pipeline: TLoggerPipe[], config: IConfig)

push(entry: ILogEntry): void

field type description
LogEntry.meta Record<string, any> Metadata
LogEntry.level ERROR | WARN | INFO | DEBUG | TRACE Log level
LogEntry.input any[] Data

trace(...data: any[]): void

debug(...data: any[]): void

info(...data: any[]): void

warn(...data: any[]): void

error(...data: any[]): void

Function createMetaPipe = () => (entry: ILogEntry): ILogEntry

Creates pipe for metadata injection, used with @qiwi-private/js-platform-mdc-nestjs

Function maskerLoggerPipeFactory = () => (entry: ILogEntry): ILogEntry

Creates pipe for pan masking

Function masker = (input: string | number): string

Masks pans

Docs