1.0.3 • Published 7 months ago
@codephil/logging-middleware v1.0.3
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