const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), winston.format.errors({ stack: true }), winston.format.splat(), winston.format.json() ), defaultMeta: { service: 'user-service' }, transports: [ new winston.transports.File({ filename: 'error.log', level: 'error' }), new winston.transports.File({ filename: 'combined.log' }) ] }); if (process.env.NODE_ENV !== 'production') { logger.add(new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), winston.format.printf(({ level, message, timestamp, stack }) => { if (stack) { // 打印错误堆栈 return `${timestamp} ${level}: ${message}\n${stack}`; } return `${timestamp} ${level}: ${message}`; }) ) })); } // 在文件日志中也使用更清晰的格式 logger.transports.forEach(t => { if (t.name === 'file') { t.format = winston.format.combine( winston.format.timestamp(), winston.format.json() ); } }); module.exports = logger;