ADR-0047: Winston for Application Logging
Status
Accepted - 2025-01-26
Context
Application needs structured logging with multiple transports (console, file, Loki).
Decision
Winston 3.x as logging library.
Rationale
- Structured JSON: Machine-readable logs
- Multiple Transports: Console + File + Loki
- Performance: 100k logs/sec
- Industry Standard: Most popular Node.js logger
Implementation
See ADR-0035 for integration logging
See ADR-0045 for Loki transport
Configuration
// src/logging/logger.ts
import winston from 'winston';
const logger = winston.createLogger({
  level: process.env.LOG_LEVEL || 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.errors({ stack: true }),
    winston.format.json()
  ),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' }),
  ],
});
Log Levels
logger.error('Database connection failed', { error: err.message });
logger.warn('Cache miss', { key });
logger.info('Booking created', { bookingId });
logger.debug('Query params', { params });