1.0.3 • Published 7 months ago

@codephil/logging-middleware v1.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

Express Logging Middleware

A TypeScript-first logging middleware for Express applications with:

  • HTTP request/response logging
  • Performance monitoring
  • Structured logging
  • Colorized console output

Features

  • Request ID tracking across logs
  • Automatic slow request detection
  • Sensitive header redaction (e.g., Authorization)
  • Structured logging with metadata
  • Prometheus metrics for request duration and counts
  • Loki integration for centralized logging
  • Secure metrics endpoints with auth options
  • Colorized console output for local development

Security

  • Metrics endpoints disabled by default
  • Basic auth enabled by default when metrics enabled
  • Optional API key authentication
  • Automatic redaction of sensitive headers

Installation

npm install @codephil/logging-middleware

Basic Usage

import express from 'express';
import { createLogger, httpLogger, performanceLogger } from '@your-org/logging-middleware';
const app = express();
const logger = createLogger('my-service');
// Add middleware
app.use(httpLogger(logger));
app.use(performanceLogger(logger));
app.get('/api/hello', (req, res) => {
logger.info('Processing request');
res.json({ message: 'Hello' });
});

Monitoring Features

Prometheus Metrics

The service automatically collects:

  • HTTP request duration histograms
  • Total request counts by endpoint
  • Response status codes
import { MonitoringService } from '@your-org/logging-middleware';
const monitoring = new MonitoringService({
enablePrometheus: true,
metricsPath: '/metrics',
// Optional security
basicAuth: true,
metricsAuth: {
username: process.env.METRICS_USER,
password: process.env.METRICS_PASSWORD
}
});
// Add metrics endpoint
app.get('/metrics', monitoring.getMetricsMiddleware());

Loki Log Aggregation

Send logs to Grafana Loki for centralized logging:

  • Service name as label
  • Request path as label
  • Response status code as label
const monitoring = new MonitoringService({
enableLoki: true,
lokiHost: 'http://my-loki:3100'
});
// Create logger with Loki enabled
const logger = createLogger('my-service', 'API', true);

Full Monitoring Example

import { createLogger, httpLogger, performanceLogger, MonitoringService } from '@your-org/logging-middleware';
// Setup monitoring
const monitoring = new MonitoringService({
enablePrometheus: true,
enableLoki: true,
lokiHost: process.env.LOKI_HOST || 'http://localhost:3100'
});
// Create logger
const logger = createLogger('my-service', 'API', true);
// Add middleware
app.use(httpLogger(logger));
app.use(performanceLogger(logger, {
slowRequestThreshold: 500, // Log requests slower than 500ms
enableMetrics: true
}));
// Expose metrics endpoint
app.get('/metrics', monitoring.getMetricsMiddleware());

Configuration Options

MonitoringConfig

interface MonitoringConfig {
enablePrometheus?: boolean; // Enable Prometheus metrics
enableLoki?: boolean; // Enable Loki log shipping
lokiHost?: string; // Loki server URL
metricsPath?: string; // Path for metrics endpoint
metricsAuth?: { // Basic auth for metrics
username: string;
password: string;
};
basicAuth?: boolean; // Enable basic auth
apiKey?: string; // Alternative API key auth
}

Performance Logger Options

interface PerformanceLoggerOptions {
slowRequestThreshold?: number; // ms threshold for slow requests
enableMetrics?: boolean; // Enable Prometheus metrics
}

Features

  • Request ID tracking across logs
  • Automatic slow request detection
  • Sensitive header redaction (e.g., Authorization)
  • Structured logging with metadata
  • Prometheus metrics for request duration and counts
  • Loki integration for centralized logging
  • Secure metrics endpoints with auth options
  • Colorized console output for local development

Security

  • Metrics endpoints disabled by default
  • Basic auth enabled by default when metrics enabled
  • Optional API key authentication
  • Automatic redaction of sensitive headers