適用于需要立即釋放磁盤空間的場景,直接通過終端命令刪除指定目錄下的日志文件。
cd命令進入Node.js應用的日志文件夾(如/path/to/your/nodejs/app/logs)。app.log,執行rm app.log。*刪除所有.log文件,如rm *.log。-rf參數(謹慎使用,避免誤刪),如rm -rf /path/to/logs/*。logrotate工具(自動輪換與清理)logrotate是Ubuntu系統自帶的日志管理工具,可自動完成日志的輪換、壓縮、刪除,避免手動操作。
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。journalctl清理系統日志(針對systemd服務)若Node.js應用通過systemd運行(如使用pm2或systemctl啟動),其日志會存儲在系統日志中,可通過journalctl命令清理。
sudo journalctl --vacuum-time 3d。sudo journalctl --vacuum-size 500M。通過第三方日志庫(如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天,并自動壓縮舊日志。若需更靈活的清理規則(如按文件大小、自定義保留天數),可編寫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檢查磁盤使用情況,確保存儲充足。