2.0.7 • Published 2 years ago
@aleksdolgop/nestjs-logger v2.0.7
Nestjs custom logger module
The logger can automatically create a trace id for an asynchronous or synchronous handler.
It is also possible to set your own unique identifier, for example, if it came in the request
header in X-Request-Id
Install
npm i @aleksdolgop/nestjs-logger
Dependencies
- pino
- async_hooks
- nestjs
- nodejs version 16 and later
Example
Change standart nestjs logger
Logger Options
export interface LoggerOptions {
/**
* Makes the module global
* @default false
*/
isGlobal?: boolean;
/**
* Turn on or off logger
* @default true
*/
enable?: boolean;
/**
* log level
* @default 'debug'
*/
level?: 'debug' | 'info';
/**
* Automatically creates a traceId on the first call to the log in the nodejs handler
* @default false
*/
autoCreateTraceId?: boolean;
/**
* Service name. Add 'service' param in log
*/
serviceName?: string;
/**
* disable pino, enable console log format
* @default true
*/
enableNativeLogger?: boolean;
/**
* npm date-fns format mask
* @see https://www.npmjs.com/package/date-fns
*/
dateFormatMask?: string;
}
main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { LoggerService } from '@aleksdolgop/nestjs-logger';
const isDevMode = process.env.NODE_ENV !== 'production';
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
...(!isDevMode && { logger: false }),
});
const logger = app.get(LoggerService);
app.useLogger(logger);
logger.log('Bootstrap', 'Server started');
}
bootstrap();
Configure logger
Sync configuration
app.module.ts
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { LoggerModule } from '@aleksdolgop/nestjs-logger';
const isDevMode = process.env.NODE_ENV !== 'production';
@Module({
imports: [
LoggerModule.forRoot({
level: isDevMode ? 'debug' : 'info',
serviceName: 'protocol-mtproto',
autoCreateTraceId: true,
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
Async configuration
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { LoggerModule } from '@aleksdolgop/nestjs-logger';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: '.env',
}),
LoggerModule.forRootAsync({
inject: [ConfigModule],
useFactory: (configService: ConfigService) => {
const serviceName = configService.get('APP_NAME');
const env = configService.get('NODE_ENV');
const autoCreateTraceId = configService.get<boolean>(
'LOGGER_ENABLE_TRACE_ID',
true,
);
const level = env !== 'production' ? 'debug' : 'info';
return {
level,
serviceName,
autoCreateTraceId,
};
},
}),
],
controllers: [],
providers: [],
})
export class AppModule {}
Log example
{"level":"info","time":1653367786531,"traceId":"4a8d43a6-24b8-426d-87c3-a8c1b096bfa9","context":"Bootstrap","service":"service-name","msg":"Server started"}