当前位置: 首页 > news >正文

Node 日志按级别分文件切割归档方案

摘要

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 三个独立文件:

  1. info:正常商品抓取、页面访问、定时任务执行等常规打印;
  2. warn:抓取延迟、图片加载失败等非阻断类异常;
  3. error:爬虫封禁、服务接口报错、文件读写失败等严重故障。 三类日志按日期拆分,每日生成全新文件,单文件上限 100MB,超出自动拆分子文件,避免单个日志文件过大。

三、自动归档与磁盘管控

开启 zippedArchive 参数,30 天前的历史日志自动压缩为 zip 包,减少磁盘占用;系统自动清理超过 30 天的压缩日志,无需人工删除。运维排查故障时,直接打开 error 日志文件,无需筛选海量正常打印,故障定位速度提升 70%。

四、业务日志分类拓展

爬虫抓取、页面接口、仓储定时任务可新增独立日志传输通道,单独输出专属日志文件,实现业务完全隔离。例如爬虫抓取日志单独存储,商品接口日志单独存放,排查抓取问题不会被页面访问日志干扰。

结语

基于 winston 的分级日志切割工具,按级别、日期拆分存储并自动压缩归档,大幅简化线上故障排查流程,降低服务器磁盘占用,适用于爬虫、中间层 Node 服务长期稳定运行场景。

http://www.jsqmd.com/news/1141447/

相关文章:

  • 13DOF传感器与PIC18LF2458实现高精度定位方案
  • 基于Si4731与PIC24EP512GU814的音频处理系统开发
  • 收藏!小白程序员轻松上手大模型,从入门到实战全攻略
  • MC6470与MK64FX512VDC12的硬件协同与运动控制优化
  • 基于PCF8591与MK51DN512CLQ10的双芯片信号转换系统设计
  • 【Java课程设计/毕业设计】户外文旅露营资源共享管理平台的设计与实现 智能露营场地排班与运维管理系统【附源码、数据库、万字文档】
  • Java安全编码实战:9步构建纵深防御体系,从输入验证到漏洞管理
  • TPA3138D2音频放大器与STM32F217ZG的协同设计优化
  • 打破音乐枷锁:Unlock-Music让你的数字音乐真正自由
  • 别把API Key藏进前端环境变量:构建产物、日志截图与泄露止损
  • 去耦电容不是容值越大滤波效果越好
  • 当服装拍摄遇上AI:菱格棉服的降本增效新解
  • Diablo Edit2:5分钟掌握暗黑破坏神2存档编辑终极神器,角色修改从未如此简单!
  • 别再只比设备采购价了!现在选电玩城新设备要看全年现金流
  • LTC1864与PIC18F87K22的高精度数据采集系统设计
  • League Akari 英雄联盟客户端工具包完整使用指南:终极游戏辅助解决方案
  • 5分钟快速上手暗黑2存档编辑器:新手终极完整指南
  • 10 行加法函数,让我终于搞懂了什么是 Harness Engineering
  • 五分钟掌握B站视频下载:大会员4K和充电专属视频轻松获取
  • 5分钟掌握Android自动打卡:DailyTask完整指南与远程控制方案
  • msAgent:MindStudio一站式调试调优agent,开箱即用
  • AzurLaneLive2DExtract:碧蓝航线Live2D资源提取工具深度解析
  • 基于L9958和PIC18的高精度直流电机控制系统设计
  • 3个关键问题:你的华硕笔记本性能为什么被限制?GHelper如何释放全部潜力?
  • 告别“金鱼记忆”:一文搞懂 Hermes 记忆系统,让你的 AI 越用越懂你!
  • 2026东莞网站建设公司排名:外贸独立站+企业官网定制优质服务商榜单
  • InnoDB 事务池探秘:从源码到现实,把 MySQL 的对象管理说清楚
  • 锂离子电池组电压平衡方案:基于MCP3202与PIC18F2525的设计
  • DockDoor:让macOS窗口管理变得前所未有的直观高效
  • 6DoF运动跟踪:IIM-42652与PIC18F45K50嵌入式方案