Enhanced nestjs-pino with OpenTelemetry, Loki, file rotation and enterprise features.
This package has peer dependencies that must be installed:
pnpm install @nestjs-labs/nestjs-pino-extra nestjs-pino @nestjs-labs/pino-http-extra @nestjs/config --save
This package requires the following peer dependencies:
If any of these dependencies are missing, you'll get runtime errors when trying to use the package. Make sure to install all peer dependencies.
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { LoggerModule } from '@nestjs-labs/nestjs-pino-extra';
@Module({
imports: [
ConfigModule.forRoot(),
LoggerModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) =>
getNestjsPinoModuleOptions(configService),
inject: [ConfigService],
}),
],
})
export class AppModule {}
# Required
OTLP_SERVICE_NAME=my-app
# Optional
LOG_LEVEL=info
LOG_FILE=/var/log/app.log
LOG_LOKI=http://loki:3100
OTEL_SPAN_ID_KEY=spanId
OTEL_TRACE_ID_KEY=traceId
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { LoggerModule } from '@nestjs-labs/nestjs-pino-extra';
@Module({
imports: [
ConfigModule.forRoot(),
LoggerModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) =>
getNestjsPinoModuleOptions(configService, {
exclude: [
{ method: 0, path: '/health' },
{ method: 0, path: '/metrics' },
],
}),
inject: [ConfigService],
}),
],
})
export class AppModule {}
getNestjsPinoModuleOptions(configService, overrides?)
Get nestjs-pino module options with improved type safety and validation.
Parameters:
configService
: ConfigService - NestJS configuration serviceoverrides
: Params (optional) - Overrides for the module optionsReturns: Params - Configured nestjs-pino module options
getPinoHttpOption(level?, spanIdKey?, traceIdKey?)
Get pino-http options with OpenTelemetry integration.
Parameters:
level
: string (default: 'info') - Log levelspanIdKey
: string (default: 'spanId') - OpenTelemetry span ID keytraceIdKey
: string (default: 'traceId') - OpenTelemetry trace ID keyReturns: Options - Configured pino-http options
getMultiDestinationStream(app, level?, filepath?, loki?)
Create multi-destination stream supporting pretty, file, and Loki outputs.
Parameters:
app
: string - Application namelevel
: pino.Level (default: 'info') - Log levelfilepath
: string (optional) - Log file path for rotationloki
: string (optional) - Loki host URLReturns: MultiStreamRes - Configured multi-stream
import { Injectable, Logger } from '@nestjs/common';
@Injectable()
export class AppService {
private readonly logger = new Logger(AppService.name);
getHello(): string {
this.logger.log('Hello World!');
return 'Hello World!';
}
}
The middleware automatically logs HTTP requests with:
MIT