
摘要Node 后端服务日志无分级存储时错误、正常请求、爬虫日志全部混在同一文件线上故障排查需要检索海量文本效率极低。本文基于 winston 封装分级日志工具按日志级别、日期自动切割文件压缩归档历史日志bidfans 爬虫、前端配套 Node 服务均使用这套日志方案。const winston require(winston); const DailyRotateFile require(winston-daily-rotate-file); // 日志格式化规则 const logFormat winston.format.combine( winston.format.timestamp({ format: YYYY-MM-DD HH:mm:ss }), winston.format.printf(info { return [${info.timestamp}] [${info.level}] ${info.message}; }) ); // 按日期切割配置 function createRotateTransport(level) { return new DailyRotateFile({ filename: logs/${level}-%Y-%m-%d.log, datePattern: YYYY-MM-DD, maxSize: 100m, maxFiles: 30d, zippedArchive: true, level: level }); } // 日志实例导出 const logger winston.createLogger({ levels: winston.config.npm.levels, format: logFormat, transports: [ createRotate(info), createRotate(warn), createRotate(error) ] }); module.exports logger;一、混合日志的运维缺陷未分级日志文件中正常商品抓取打印、接口访问、程序崩溃报错全部混杂在一起出现爬虫大量 403 报错时需要逐行检索数万行日志日志无自动切割单个文件达到数个 GB 后打开卡顿甚至无法读取历史日志长期占用服务器磁盘无自动压缩清理机制。bidfans 爬虫服务每日产生大量抓取日志未做切割前日志文件体积暴增磁盘占用持续告警。二、分级存储设计思路日志分为 info、warn、error 三个独立文件info正常商品抓取、页面访问、定时任务执行等常规打印warn抓取延迟、图片加载失败等非阻断类异常error爬虫封禁、服务接口报错、文件读写失败等严重故障。 三类日志按日期拆分每日生成全新文件单文件上限 100MB超出自动拆分子文件避免单个日志文件过大。三、自动归档与磁盘管控开启 zippedArchive 参数30 天前的历史日志自动压缩为 zip 包减少磁盘占用系统自动清理超过 30 天的压缩日志无需人工删除。运维排查故障时直接打开 error 日志文件无需筛选海量正常打印故障定位速度提升 70%。四、业务日志分类拓展爬虫抓取、页面接口、仓储定时任务可新增独立日志传输通道单独输出专属日志文件实现业务完全隔离。例如爬虫抓取日志单独存储商品接口日志单独存放排查抓取问题不会被页面访问日志干扰。结语基于 winston 的分级日志切割工具按级别、日期拆分存储并自动压缩归档大幅简化线上故障排查流程降低服务器磁盘占用适用于爬虫、中间层 Node 服务长期稳定运行场景。