在Linux環境下,對Node.js應用程序的日志進行切割和管理是非常重要的,以確保日志文件不會無限增長,占用過多磁盤空間。以下是一些常見的日志切割策略和工具:
logrotate 工具logrotate 是一個非常強大的日志管理工具,可以自動切割、壓縮和刪除日志文件。
假設你的Node.js應用程序的日志文件路徑為 /var/log/myapp.log,你可以創建一個 logrotate 配置文件 /etc/logrotate.d/myapp,內容如下:
/var/log/myapp.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
}
解釋:
daily: 每天切割一次日志。rotate 7: 保留最近7天的日志文件。compress: 壓縮舊的日志文件。delaycompress: 延遲壓縮,直到下一次切割。missingok: 如果日志文件不存在,不會報錯。notifempty: 如果日志文件為空,不進行切割。create 640 root adm: 創建新的日志文件,權限為640,屬主為root,屬組為adm。logrotate你可以手動觸發 logrotate 來測試配置是否正確:
sudo logrotate -f /etc/logrotate.d/myapp
pm2 管理Node.js應用如果你使用 pm2 來管理Node.js應用,它內置了日志管理功能,包括日志切割。
在 pm2 的配置文件 ecosystem.config.js 中,可以添加日志相關的配置:
module.exports = {
apps: [{
name: 'myapp',
script: 'app.js',
out_file: '/var/log/myapp.out',
error_file: '/var/log/myapp.error.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss',
max_size: '10M',
instances: 'max',
exec_mode: 'cluster'
}]
};
解釋:
out_file 和 error_file: 指定標準輸出和錯誤輸出的日志文件路徑。log_date_format: 日志日期格式。max_size: 單個日志文件的最大大小,超過后會自動切割。instances: 實例數量,max 表示根據CPU核心數自動調整。使用 pm2 啟動應用:
pm2 start ecosystem.config.js
如果你需要更復雜的日志切割策略,可以編寫自定義腳本。
以下是一個簡單的日志切割腳本示例:
#!/bin/bash
LOG_FILE="/var/log/myapp.log"
BACKUP_DIR="/var/log/myapp-backup"
# 創建備份目錄
mkdir -p $BACKUP_DIR
# 切割日志文件
cp $LOG_FILE $BACKUP_DIR/myapp-$(date +%Y%m%d%H%M%S).log
# 清空原日志文件
> $LOG_FILE
# 壓縮備份的日志文件
cd $BACKUP_DIR
zip -r myapp-$(date +%Y%m%d%H%M%S).zip myapp-*.log
# 刪除舊的日志文件
find . -type f -name 'myapp-*.log' -mtime +7 -exec rm {} \;
將腳本添加到 cron 定時任務中:
crontab -e
添加以下行,每天凌晨2點執行日志切割腳本:
0 2 * * * /path/to/your/logrotate-script.sh
通過以上方法,你可以有效地管理Node.js應用程序的日志文件,確保系統的穩定性和可維護性。