首页主机资讯Ubuntu Node.js日志轮转技巧

Ubuntu Node.js日志轮转技巧

时间2025-10-31 01:23:03发布访客分类主机资讯浏览1263
导读:使用 logrotate 工具(系统级日志轮转) logrotate 是 Ubuntu 系统自带的日志管理工具,可自动处理 Node.js 应用日志的轮转、压缩和清理,无需修改应用代码。 安装 logrotate:若未安装,通过以下命令安...

使用 logrotate 工具(系统级日志轮转)
logrotate 是 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 支持按时间和大小轮转,兼顾性能与管理需求。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu Node.js日志轮转技巧
本文地址: https://pptw.com/jishu/739533.html
Node.js日志错误代码Ubuntu怎么查 Ubuntu下Node.js日志存储策略

游客 回复需填写必要信息