温馨提示×

Ubuntu Node.js日志清理方法有哪些

小樊
52
2025-09-20 12:23:38
栏目: 编程语言

Ubuntu系统下Node.js日志清理的常见方法

1. 手动清理日志文件(临时解决)

适用于需要立即释放空间的场景,通过命令行直接删除指定日志文件。

  • 定位日志文件:Node.js日志通常存储在应用目录的logs子目录(如/var/log/nodejs/your-app.log)或项目根目录的logs文件夹中。
  • 清空日志文件:若只需清空内容而非删除文件,可使用truncate命令(避免误删文件本身):
    sudo truncate -s 0 /path/to/your/nodejs/logs/*.log
    
  • 删除旧日志文件:使用find命令查找并删除指定天数前的日志(如7天前):
    sudo find /path/to/your/nodejs/logs -type f -name "*.log" -mtime +7 -exec rm -f {} \;
    

注意:执行前需确认日志路径正确,避免误删系统或其他应用的日志文件。

2. 使用logrotate工具(自动轮转与清理)

Ubuntu系统自带的日志管理工具,可自动完成日志轮转(分割)、压缩、删除旧日志,无需手动干预。

  • 安装logrotate(若未安装):
    sudo apt-get update && sudo apt-get install logrotate
    
  • 配置logrotate规则:在/etc/logrotate.d/目录下创建Node.js专用配置文件(如nodejs-app),内容示例如下:
    /path/to/your/nodejs/logs/*.log {
        daily                   # 每天轮转
        rotate 7                # 保留最近7个轮转文件
        compress                # 压缩旧日志(如.gz格式)
        missingok               # 日志不存在时不报错
        notifempty              # 日志为空时不轮转
        create 0640 root adm    # 新建日志文件权限及属主
    }
    
  • 手动触发测试:强制运行logrotate并检查配置是否正确:
    sudo logrotate -d /etc/logrotate.d/nodejs-app  # dry run(模拟运行)
    sudo logrotate -f /etc/logrotate.d/nodejs-app  # 强制运行
    

优势:系统级工具,支持定时任务(默认每天执行),配置灵活,适合长期管理。

3. 编写Shell脚本+定时任务(定制化清理)

适用于需要自定义清理逻辑(如按文件大小、特定命名规则清理)的场景。

  • 创建清理脚本:如/usr/local/bin/clean-nodejs-logs.sh,内容如下:
    #!/bin/bash
    LOG_DIR="/path/to/your/nodejs/logs"
    DAYS_TO_KEEP=7
    find "$LOG_DIR" -type f -name "*.log" -mtime +"$DAYS_TO_KEEP" -exec rm -f {} \;
    
  • 赋予执行权限
    sudo chmod +x /usr/local/bin/clean-nodejs-logs.sh
    
  • 设置cron定时任务:编辑当前用户的crontab(crontab -e),添加以下行(每天凌晨1点执行):
    0 1 * * * /usr/local/bin/clean-nodejs-logs.sh
    

说明:通过cron定时触发脚本,实现自动化清理,适合需要灵活调整清理频率的场景。

4. 使用Node.js内置模块(应用层清理)

适用于需要在应用内部控制日志清理的场景(如根据业务逻辑动态清理)。

  • 使用fs模块删除旧日志:编写脚本遍历日志目录,删除超过指定时间的文件:
    const fs = require('fs');
    const path = require('path');
    const logDir = './logs'; // 日志目录
    const maxAge = 7 * 24 * 60 * 60 * 1000; // 7天的毫秒数
    
    fs.readdir(logDir, (err, files) => {
      if (err) throw err;
      files.forEach(file => {
        const filePath = path.join(logDir, file);
        fs.stat(filePath, (err, stats) => {
          if (err) throw err;
          if (stats.isFile() && Date.now() - stats.mtime > maxAge) {
            fs.unlink(filePath, err => {
              if (err) throw err;
              console.log(`Deleted: ${filePath}`);
            });
          }
        });
      });
    });
    
  • 设置定时任务:可通过setInterval每天执行一次,或结合cron定时调用脚本。

5. 利用日志库的内置轮换功能(推荐集成)

若使用日志库(如winston),可通过插件实现日志自动轮转与清理,无需额外脚本。

  • 安装winston-daily-rotate-file插件
    npm install winston winston-daily-rotate-file
    
  • 配置日志轮转:在应用代码中设置DailyRotateFile传输:
    const winston = require('winston');
    const DailyRotateFile = require('winston-daily-rotate-file');
    
    const logger = winston.createLogger({
      transports: [
        new DailyRotateFile({
          filename: '/path/to/your/nodejs/logs/combined.log',
          datePattern: 'YYYY-MM-DD', // 按天分割
          zippedArchive: true,       // 压缩旧日志
          maxSize: '20m',            // 单个日志文件最大20MB
          maxFiles: '14d',           // 保留14天日志
        }),
      ],
    });
    
    logger.info('This is a log message.');
    

优势:与应用深度集成,支持按大小、时间分割日志,自动清理旧日志,适合使用winston的项目。

6. 使用Ubuntu Cleaner工具(图形化清理)

适用于不熟悉命令行的用户,通过图形界面快速清理系统日志(包括Node.js日志)。

  • 安装Ubuntu Cleaner
    sudo add-apt-repository ppa:gerardpuig/ppa
    sudo apt update
    sudo apt install ubuntu-cleaner
    
  • 运行清理:打开Ubuntu Cleaner,选择“系统日志”选项,预览并确认清理操作。
    注意:该工具会清理系统所有日志,需谨慎选择,避免误删重要日志。

以上方法覆盖了从临时手动清理到自动化长期管理的不同需求,可根据实际场景选择合适的方式。建议优先使用logrotate或日志库的内置功能,实现自动化管理,减少人工干预。

0