Ubuntu下清理Node.js日志的常用方法
若需快速清理指定目錄下的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
注意:此方法需手動執行,無法自動化,適合臨時清理。
logrotate
是Ubuntu系統自帶的日志管理工具,可自動輪轉、壓縮、刪除舊日志。
sudo apt-get update
sudo apt-get install logrotate
/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
此方法可實現自動化定期清理,無需額外腳本。若需更靈活的清理邏輯(如按文件大小、特定命名規則),可編寫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
crontab -e
添加以下內容:0 1 * * * /usr/local/bin/clean-nodejs-logs.sh
此方法適合需要自定義清理條件的場景。若Node.js應用通過systemd
管理(如使用systemctl
啟動),可創建systemd定時任務實現日志清理。
/usr/local/bin/clean-nodejs-logs.sh
,內容同上)。/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
/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定時任務與系統深度集成,可靠性高,適合生產環境。通過第三方日志庫(如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');
此方法從應用源頭控制日志,無需依賴外部工具,適合需要精細化日志管理的場景。若Node.js日志通過systemd-journald
服務記錄(如應用以systemd
方式運行),可使用journalctl
命令清理系統日志。
sudo journalctl --vacuum-time 3d
sudo journalctl --vacuum-size 500M
此方法適合清理系統級日志,若Node.js日志集成到系統日志中,可間接減少日志占用。