Ubuntu下Node.js日志轮转技巧

作者:袖梨 2026-06-10

使用 logrotate 工具(系统级日志轮转)logrotate 是 Ubuntu 系统自带的日志管理工具,可自动处理 Node.js 应用日志的轮转、压缩和清理,无需修改应用代码。

Ubuntu Node.js日志轮转技巧

  • 安装 logrotate:若未安装,通过以下命令安装:
    sudo apt-get update && sudo apt-get install logrotate
  • 创建配置文件:在 /etc/logrotate.d/ 目录下新建针对 Node.js 应用的配置文件(如 nodejs-app):
    sudo nano /etc/logrotate.d/nodejs-app
  • 配置参数说明:在配置文件中添加以下内容(根据实际路径调整):
    /path/to/your/nodejs/app/*.log {daily# 每天轮转一次(可选:weekly/monthly)rotate 7 # 保留最近7个轮转文件compress # 压缩旧日志(节省空间)delaycompress# 延迟压缩(如第8个文件才压缩第1个)missingok# 日志文件不存在时不报错notifempty # 日志为空时不轮转create 0640 root adm # 新日志文件权限(属主root,属组adm)sharedscripts# 多个日志文件匹配时,postrotate仅执行一次postrotate# 若应用由systemd管理,建议用systemctl重启(避免kill进程)systemctl restart your-nodejs-app.service# 若直接通过进程ID启动,可注释上方行,取消下方注释# kill -HUP `cat /path/to/your/nodejs/app/pidfile`endscript}
  • 测试配置:手动触发轮转以验证配置是否正确:
    sudo logrotate -f /etc/logrotate.d/nodejs-app
  • 自动运行:logrotate 默认通过系统 cron 任务(/etc/cron.daily/logrotate)每天自动执行,无需额外配置。

使用 Winston + winston-daily-rotate-file(应用层日志轮转)若需更灵活的控制(如按文件大小轮转、自定义日志格式),可使用 Winston 日志库结合 winston-daily-rotate-file 插件,实现应用内日志轮转。

  • 安装依赖:
    npm install winston winston-daily-rotate-file
  • 配置示例:
    const winston = require('winston');const DailyRotateFile = require('winston-daily-rotate-file');const transport = new DailyRotateFile({filename: '/path/to/your/logs/application-%DATE%.log', // 日志文件名(含日期占位符)datePattern: 'YYYY-MM-DD', // 日期格式(每天一个文件)zippedArchive: true, // 压缩旧日志maxSize: '20m',// 单个文件最大大小(超过则轮转)maxFiles: '14d', // 保留最近14天的日志createSymlink: true, // 创建符号链接(指向最新日志)symlinkName: 'current.log' // 符号链接名称});const logger = winston.createLogger({level: 'info',format: winston.format.combine(winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), // 添加时间戳winston.format.json()// JSON格式输出),transports: [transport]// 使用轮转传输});// 测试日志logger.info('This is a rotated log message.');
  • 优势:可根据业务需求调整轮转条件(如按大小、时间),支持多传输目标(如同时输出到控制台和文件),适合需要精细化管理的应用。

使用 Pino + pino-rotate(高性能日志轮转)若应用对日志性能要求极高(如实时性强的微服务),可使用 Pino 日志库(Node.js 性能最高的日志库)结合 pino-rotate 插件,实现高效的日志轮转。

  • 安装依赖:
    npm install pino pino-rotate
  • 配置示例:
    const pino = require('pino');const rotate = require('pino-rotate');const logger = pino({level: 'info',transport: {target: 'pino-pretty', // 可选:美化输出(开发环境使用)options: { colorize: true }}});// 启动轮转(每天轮转,保留14天,压缩旧日志)rotate({period: '1d',// 轮转周期(1d=每天)path: '/path/to/your/logs/pino-', // 日志路径前缀maxsize: '20m',// 单个文件最大大小compress: true // 压缩旧日志})(logger);// 测试日志logger.info('This is a high-performance rotated log message.');
  • 优势:Pino 采用二进制 JSON 格式,日志写入速度远快于其他库(约 10 倍于 Winston),适合高并发场景;pino-rotate 支持按时间和大小轮转,兼顾性能与管理需求。

相关文章

精彩推荐