温馨提示×

Node.js在Ubuntu上日志分割策略

小樊
55
2025-08-15 02:08:05
栏目: 编程语言

在Ubuntu上对Node.js日志进行分割可采用以下策略:

一、使用系统工具logrotate

  • 安装工具sudo apt-get install logrotate
  • 配置文件:在/etc/logrotate.d/下创建配置文件(如nodejs-app),内容示例:
    /path/to/your/nodejs/app/logs/*.log {
      daily       # 每天分割
      rotate 7    # 保留7天日志
      compress    # 压缩旧日志
      missingok   # 文件不存在时不报错
      notifempty  # 空文件不分割
      create 0640 root adm  # 新日志权限和属主
    }
    
    可根据需求调整dailysize(按大小分割)等参数。
  • 测试与生效sudo logrotate -f /etc/logrotate.d/nodejs-app手动测试,系统默认通过cron每日自动执行。

二、使用Node.js日志库

  • winston:安装winstonwinston-daily-rotate-file,配置示例:

    const winston = require('winston');
    const DailyRotateFile = require('winston-daily-rotate-file');
    
    const logger = winston.createLogger({
      transports: [
        new DailyRotateFile({
          filename: 'logs/app-%DATE%.log',
          datePattern: 'YYYY-MM-DD', // 按日期分割
          maxSize: '10m', // 单个文件最大10MB
          maxFiles: '14d' // 保留14天日志
        })
      ]
    });
    

    支持按日期、大小灵活分割,且可集成到应用代码中。

  • log4js:配置dateFile类型的appender实现按日期分割:

    const log4js = require('log4js');
    log4js.configure({
      appenders: {
        file: {
          type: 'dateFile',
          filename: 'logs/app.log',
          pattern: '-yyyy-MM-dd.log'
        }
      },
      categories: { default: { appenders: ['file'], level: 'info' } }
    });
    const logger = log4js.getLogger();
    

    适合需要结构化日志的场景。

三、结合进程管理器(如PM2)

  • PM2日志分割:在ecosystem.config.js中配置:
    module.exports = {
      apps: [{
        name: 'app',
        script: 'app.js',
        log_date_format: 'YYYY-MM-DD HH:mm:ss',
        log_rotation: true,
        log_rotation_interval: '1d', // 每天分割
        log_rotation_size: '10M', // 或按大小分割
        log_rotation_retain: 7 // 保留7天
      }]
    };
    
    通过pm2 start ecosystem.config.js启动,支持自动切割和清理。

四、注意事项

  • 权限管理:确保日志目录属主为root或应用用户,避免权限问题。
  • 敏感信息过滤:在日志库配置中避免记录密码、密钥等敏感数据。
  • 性能优化:高并发场景优先选择异步日志库(如Pino),减少主线程阻塞。

以上策略可单独或组合使用,根据实际需求选择最适合的方式[1,2,3,4,5,6,7,8,9,10,11]。

0