在Linux服務器上,對Node.js應用程序的日志進行輪轉是一種常見的做法,以防止日志文件過大并占用過多磁盤空間。以下是幾種實現日志輪轉的方法:
logrotate
工具logrotate
是一個非常強大的日志管理工具,可以自動輪轉、壓縮和刪除日志文件。
安裝 logrotate
:
大多數Linux發行版默認已經安裝了 logrotate
,如果沒有安裝,可以使用包管理器進行安裝。例如,在Debian/Ubuntu上:
sudo apt-get install logrotate
配置 logrotate
:
創建一個新的配置文件或編輯現有的配置文件,通常位于 /etc/logrotate.d/
目錄下。例如,創建一個名為 nodejs
的配置文件:
sudo nano /etc/logrotate.d/nodejs
在配置文件中添加以下內容:
/path/to/your/nodejs/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root adm
}
解釋:
daily
: 每天輪轉一次日志。rotate 7
: 保留7個輪轉日志文件。compress
: 壓縮舊的日志文件。delaycompress
: 延遲壓縮,直到下一次輪轉。missingok
: 如果日志文件不存在,不會報錯。notifempty
: 如果日志文件為空,不進行輪轉。create 0640 root adm
: 創建新的日志文件,權限為0640,屬主為root,屬組為adm。測試配置:
可以手動測試 logrotate
配置是否正確:
sudo logrotate -f /etc/logrotate.d/nodejs
pm2
管理Node.js應用如果你使用 pm2
來管理Node.js應用,pm2
內置了日志輪轉功能。
安裝 pm2
:
sudo npm install pm2 -g
啟動應用并啟用日志輪轉:
pm2 start app.js --name my-app --log-date-format "YYYY-MM-DD HH:mm:ss"
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
解釋:
--log-date-format
: 設置日志日期格式。pm2-logrotate:max_size
: 設置單個日志文件的最大大小。pm2-logrotate:retain
: 設置保留的日志文件數量。如果你不想依賴外部工具,可以編寫一個自定義腳本來實現日志輪轉。
創建輪轉腳本:
創建一個名為 rotate_logs.sh
的腳本:
#!/bin/bash
LOG_DIR="/path/to/your/nodejs/logs"
MAX_LOGS=7
LOG_FILE="app.log"
# 獲取當前日期
DATE=$(date +%Y-%m-%d)
# 移動日志文件并重命名
mv "$LOG_DIR/$LOG_FILE" "$LOG_DIR/$LOG_FILE-$DATE"
# 刪除超過最大數量的日志文件
cd "$LOG_DIR"
ls -1t $LOG_FILE-* | tail -n +$((MAX_LOGS + 1)) | xargs rm -f
# 創建新的日志文件
touch $LOG_FILE
設置定時任務:
使用 cron
設置定時任務,每天執行一次輪轉腳本:
crontab -e
添加以下行:
0 0 * * * /path/to/rotate_logs.sh
通過以上方法,你可以有效地管理Node.js應用程序的日志文件,確保它們不會占用過多磁盤空間,并且可以方便地進行日志分析和故障排查。