溫馨提示×

Ubuntu下Node日志如何清理

小樊
45
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女