温馨提示×

Ubuntu下Node日志如何清理

小樊
50
2025-10-01 03:52:38
栏目: 智能运维

Ubuntu下清理Node.js日志的常用方法

1. 手动删除日志文件(临时清理)

若需快速清理指定目录下的Node.js日志,可通过终端手动操作。首先定位日志目录(通常为/path/to/your/nodejs/app/logs//var/log/nodejs/),再使用rm命令删除:

# 进入日志目录
cd /path/to/your/nodejs/app/logs
# 删除所有.log文件(谨慎使用通配符)
rm *.log
# 若需递归删除子目录中的日志
rm -r *.log

注意:此方法需手动执行,无法自动化,适合临时清理。

2. 使用logrotate工具(推荐自动化方案)

logrotate是Ubuntu系统自带的日志管理工具,可自动轮转、压缩、删除旧日志。

  • 安装logrotate(若未安装):
    sudo apt-get update
    sudo apt-get install logrotate
    
  • 创建Node.js专用配置文件
    /etc/logrotate.d/目录下新建文件(如nodejs-app),添加以下内容(根据实际路径调整):
    /path/to/your/nodejs/app/logs/*.log {
        daily               # 每天轮转
        rotate 7            # 保留最近7份日志
        compress            # 压缩旧日志(.gz格式)
        missingok           # 日志不存在时不报错
        notifempty          # 日志为空时不轮转
        create 0640 root adm # 新建日志文件权限
    }
    
  • 手动触发轮转(验证配置)
    sudo logrotate -f /etc/logrotate.d/nodejs-app
    
    此方法可实现自动化定期清理,无需额外脚本。

3. 编写Shell脚本+定时任务(灵活定制)

若需更灵活的清理逻辑(如按文件大小、特定命名规则),可编写Shell脚本并通过cron定时执行。

  • 创建清理脚本(如/usr/local/bin/clean-nodejs-logs.sh):
    #!/bin/bash
    LOG_DIR="/path/to/your/nodejs/app/logs"
    # 删除7天前的.log文件
    find "$LOG_DIR" -type f -name "*.log" -mtime +7 -exec rm -f {} \;
    
  • 赋予脚本执行权限
    sudo chmod +x /usr/local/bin/clean-nodejs-logs.sh
    
  • 设置cron定时任务(每天凌晨1点执行):
    crontab -e
    
    添加以下内容:
    0 1 * * * /usr/local/bin/clean-nodejs-logs.sh
    
    此方法适合需要自定义清理条件的场景。

4. 利用systemd定时任务(系统级集成)

若Node.js应用通过systemd管理(如使用systemctl启动),可创建systemd定时任务实现日志清理。

  • 创建清理脚本(如/usr/local/bin/clean-nodejs-logs.sh,内容同上)。
  • 创建systemd服务文件/etc/systemd/system/clean-nodejs-logs.service):
    [Unit]
    Description=Clean Node.js logs older than 7 days
    
    [Service]
    ExecStart=/usr/local/bin/clean-nodejs-logs.sh
    
  • 创建systemd定时器文件/etc/systemd/system/clean-nodejs-logs.timer):
    [Unit]
    Description=Run clean-nodejs-logs daily
    
    [Timer]
    OnCalendar=daily
    Persistent=true
    
    [Install]
    WantedBy=timers.target
    
  • 激活并启动定时任务
    sudo systemctl daemon-reload
    sudo systemctl enable clean-nodejs-logs.timer
    sudo systemctl start clean-nodejs-logs.timer
    
    systemd定时任务与系统深度集成,可靠性高,适合生产环境。

5. 在Node.js应用内实现日志轮换(源头控制)

通过第三方日志库(如winston+winston-daily-rotate-file),在应用代码中实现日志的自动轮换与清理,避免日志文件无限增长。

  • 安装依赖
    npm install winston winston-daily-rotate-file
    
  • 配置日志传输(在应用代码中):
    const winston = require('winston');
    const DailyRotateFile = require('winston-daily-rotate-file');
    
    const logger = winston.createLogger({
      level: 'info',
      format: winston.format.json(),
      transports: [
        new DailyRotateFile({
          filename: '/path/to/your/nodejs/app/logs/app-%DATE%.log', // 日志文件名格式
          datePattern: 'YYYY-MM-DD',         // 按天分割
          zippedArchive: true,               // 压缩旧日志
          maxSize: '20m',                    // 单个日志文件最大20MB
          maxFiles: '14d',                   // 保留最近14天日志
        }),
      ],
    });
    
    // 使用logger记录日志
    logger.info('This is a log message');
    
    此方法从应用源头控制日志,无需依赖外部工具,适合需要精细化日志管理的场景。

6. 使用journalctl清理系统日志(关联日志)

若Node.js日志通过systemd-journald服务记录(如应用以systemd方式运行),可使用journalctl命令清理系统日志。

  • 删除3天前的日志
    sudo journalctl --vacuum-time 3d
    
  • 删除小于500MB的日志
    sudo journalctl --vacuum-size 500M
    
    此方法适合清理系统级日志,若Node.js日志集成到系统日志中,可间接减少日志占用。

0