溫馨提示×

Node.js日志文件Ubuntu如何清理

小樊
50
2025-10-07 10:01:54
欄目: 編程語言

Ubuntu系統清理Node.js日志文件的常用方法

1. 手動刪除日志文件(臨時清理)

適用于需要立即釋放磁盤空間的場景,直接通過終端命令刪除指定目錄下的日志文件。

  • 導航到日志目錄:使用cd命令進入Node.js應用的日志文件夾(如/path/to/your/nodejs/app/logs)。
  • 刪除單個日志文件:若日志文件名為app.log,執行rm app.log。
  • 刪除多個日志文件:使用通配符*刪除所有.log文件,如rm *.log。
  • 強制刪除非空目錄:若日志目錄非空,可添加-rf參數(謹慎使用,避免誤刪),如rm -rf /path/to/logs/*。

2. 使用logrotate工具(自動輪換與清理)

logrotate是Ubuntu系統自帶的日志管理工具,可自動完成日志的輪換、壓縮、刪除,避免手動操作。

  • 安裝logrotate(若未安裝):sudo apt-get install logrotate。
  • 創建配置文件:在/etc/logrotate.d/目錄下新建配置文件(如nodeapp),內容如下(根據實際路徑調整):
    /path/to/your/nodejs/app/logs/*.log {
        daily                   # 每天輪換
        rotate 7                # 保留最近7天的日志
        compress                # 壓縮舊日志(如app.log.1.gz)
        missingok               # 日志文件不存在時不報錯
        notifempty              # 日志為空時不輪換
        create 0640 root adm    # 創建新日志文件并設置權限
    }
    
  • 手動觸發輪換:若需立即應用配置,執行sudo logrotate -f /etc/logrotate.d/nodeapp。

3. 利用journalctl清理系統日志(針對systemd服務)

若Node.js應用通過systemd運行(如使用pm2systemctl啟動),其日志會存儲在系統日志中,可通過journalctl命令清理。

  • 刪除指定時間前的日志:如刪除3天前的日志,執行sudo journalctl --vacuum-time 3d。
  • 限制日志文件大小:如將日志限制在500MB以內,執行sudo journalctl --vacuum-size 500M。

4. 在Node.js應用中實現自動日志輪換

通過第三方日志庫(如winston-daily-rotate-file)在應用層實現日志的自動輪換,無需依賴系統工具。

  • 安裝庫npm install 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.info('This is a log message.'); // 記錄日志
    
    此配置會每天生成新的日志文件,保留14天,并自動壓縮舊日志。

5. 編寫Shell腳本定期清理(自定義自動化)

若需更靈活的清理規則(如按文件大小、自定義保留天數),可編寫Shell腳本并通過cron定時運行。

  • 創建腳本文件:如cleanup-nodejs-logs.sh,內容如下(替換為實際路徑和保留天數):
    #!/bin/bash
    LOG_DIR="/path/to/your/nodejs/app/logs"
    DAYS_TO_KEEP=7
    
    # 查找并刪除超過指定天數的.log文件
    find "$LOG_DIR" -type f -name "*.log" -mtime +$DAYS_TO_KEEP -exec rm -f {} \;
    echo "Deleted logs older than $DAYS_TO_KEEP days in $LOG_DIR"
    
  • 賦予執行權限chmod +x cleanup-nodejs-logs.sh。
  • 添加定時任務:通過crontab -e添加以下行(如每天凌晨0點運行):
    0 0 * * * /path/to/cleanup-nodejs-logs.sh
    
    此腳本會每天自動清理超過7天的日志文件。

注意事項

  • 備份重要日志:清理前確認日志中無關鍵信息,避免誤刪。
  • 測試配置:使用logrotate -d /etc/logrotate.d/nodeapp(dry run)測試配置是否正確。
  • 監控磁盤空間:定期通過df -h檢查磁盤使用情況,確保存儲充足。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女