import winston from 'winston'; const { combine, timestamp, printf, colorize, errors } = winston.format; const logFormat = printf(({ level, message, timestamp, stack }) => { return `${timestamp} [${level}]: ${stack || message}`; }); const getLogLevel = (): string => { const env = process.env.NODE_ENV || 'development'; switch (env) { case 'production': return 'warn'; case 'test': return 'error'; default: return 'debug'; } }; const logger = winston.createLogger({ level: getLogLevel(), format: combine( errors({ stack: true }), timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }) ), transports: [ new winston.transports.Console({ format: combine( colorize({ all: true }), timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), logFormat ), }), ], exitOnError: false, }); export default logger;