JSPM

@nestjs-labs/pino-http-extra

1.0.4
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 362
  • Score
    100M100P100Q81643F
  • License MIT

Enhanced pino-http with OpenTelemetry, Loki, file rotation and enterprise features

Package Exports

  • @nestjs-labs/pino-http-extra
  • @nestjs-labs/pino-http-extra/options
  • @nestjs-labs/pino-http-extra/serializers
  • @nestjs-labs/pino-http-extra/streams

Readme

@nestjs-labs/pino-http-extra

Enhanced pino-http with OpenTelemetry, Loki, file rotation and enterprise features.

npm version License

Features

  • 🔍 OpenTelemetry Integration: Automatic span and trace ID injection
  • 📊 Loki Transport: Send logs to Grafana Loki
  • 📁 File Rotation: Automatic log file rotation with compression
  • 🎨 Pretty Logging: Colored and formatted console output
  • 🔒 Security: Automatic redaction of sensitive fields
  • Performance: High-performance logging with Pino
  • 🆔 Request ID: Automatic request ID generation and tracking
  • 📈 Response Time: Automatic response time tracking

Installation

npm install @nestjs-labs/pino-http-extra

Quick Start

Basic Setup

import pino from 'pino'
import pinoHttp from 'pino-http'
import { getPinoHttpOption, getMultiDestinationStream } from '@nestjs-labs/pino-http-extra'

const level = process.env.LOG_LEVEL || 'info'
const app = process.env.APP_NAME || 'my-app'
const pinoHttpOption = getPinoHttpOption(level, 'spanId', 'traceId')
const filename = process.env.LOG_FILE || 'logs/app.log'
const loki = process.env.LOKI_HOST
const multiStream = getMultiDestinationStream(app, level as pino.Level, filename, loki)
const pinoHttpLogger = pinoHttp(pinoHttpOption)
const logger = pino(pinoHttpOption, multiStream)

Express.js Integration

import express from 'express'
import pinoHttp from 'pino-http'
import { getPinoHttpOption, getMultiDestinationStream } from '@nestjs-labs/pino-http-extra'

const app = express()
const multiStream = getMultiDestinationStream(app, 'info', 'logs/app.log', 'http://loki:3100')
const pinoHttpOption = getPinoHttpOption()
const pinoHttpLogger = pinoHttp(pinoHttpOption)

app.use(pinoHttpLogger)

app.get('/', (req, res) => {
  req.log.info('Hello from pino-http-extra!')
  res.json({ message: 'Hello World!' })
})

app.listen(3000, () => {
  console.log('Server running on port 3000')
})

Fastify Integration

import Fastify from 'fastify'
import { getPinoHttpOption } from '@nestjs-labs/pino-http-extra'

const fastify = Fastify({
  logger: getPinoHttpOption()
})

fastify.get('/', async (request, reply) => {
  request.log.info('Hello from pino-http-extra!')
  return { message: 'Hello World!' }
})

fastify.listen({ port: 3000 })

API Reference

Core Functions

getPinoHttpOption(level?, spanIdKey?, traceIdKey?)

Get pino-http options with OpenTelemetry integration and security features.

Parameters:

  • level: string (default: 'info') - Log level
  • spanIdKey: string (default: 'spanId') - OpenTelemetry span ID key
  • traceIdKey: string (default: 'traceId') - OpenTelemetry trace ID key

Returns: Options - Configured pino-http options

getMultiDestinationStream(app, level?, filepath?, loki?)

Create multi-destination stream supporting pretty, file, and Loki outputs.

Parameters:

  • app: string - Application name for Loki labels
  • level: pino.Level (default: 'info') - Log level
  • filepath: string (optional) - Log file path for rotation
  • loki: string (optional) - Loki host URL

Returns: MultiStreamRes - Configured multi-stream

Examples

Custom Logging

import pino from 'pino'
import { getPinoHttpOption } from '@nestjs-labs/pino-http-extra'

const logger = pino(getPinoHttpOption())

logger.info('Application started')
logger.warn('Warning message')
logger.error('Error occurred', { error: new Error('Something went wrong') })

HTTP Request Logging

The middleware automatically logs HTTP requests with:

  • Request ID: Automatically generated and tracked
  • Response Time: Automatic timing of request duration
  • Status Code Logging:
    • 2xx: info level
    • 4xx: warn level
    • 5xx: error level
    • 3xx: silent level
  • Sensitive Data Redaction: Automatic redaction of password fields
  • OpenTelemetry Integration: Automatic span and trace ID injection

Log Output Example

{
  "level": "info",
  "time": "2024-01-15T10:30:00.000Z",
  "reqId": "550e8400-e29b-41d4-a716-446655440000",
  "spanId": "1234567890abcdef",
  "traceId": "abcdef1234567890",
  "req": {
    "method": "GET",
    "url": "/api/users",
    "headers": {
      "user-agent": "Mozilla/5.0..."
    }
  },
  "res": {
    "statusCode": 200
  },
  "responseTime": 45,
  "msg": "request completed"
}

License

MIT