const { createLogger, format, transports } = require('winston'); require('winston-daily-rotate-file'); const { combine, timestamp, label, printf } = format; function formatDate(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; } // 自定义日志格式 const myFormat = printf(({ level, message, label, timestamp }) => { const formattedTimestamp = formatDate(new Date(timestamp)); return `${formattedTimestamp} [${label}] ${level}: ${message}`; }); // 创建日志记录器 const logger = createLogger({ level: 'info', // 设置最低日志级别 format: combine( label({ label: 'dataSocketService' }), // 可选:给日志添加标签 timestamp(), // 添加时间戳 myFormat // 使用自定义格式 ), transports: [ new transports.Console(), // 输出到控制台(可选) new transports.DailyRotateFile({ filename: 'logs/application-%DATE%.log', // 日志文件名模式 datePattern: 'YYYY-MM-DD', // 日期格式 zippedArchive: true, // 归档旧日志文件时压缩 maxSize: '20m', // 文件最大大小 maxFiles: '14d', // 保留最近14天的日志文件 }), ], }); module.exports = logger;