Package Exports
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@codephil/logging-middleware) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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-middlewareBasic 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