在Debian系统中,可通过以下方式归档Node.js日志:
使用logrotate工具(推荐)
sudo apt-get install logrotatesudo nano /etc/logrotate.d/nodejs,添加以下内容:/path/to/nodejs/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
postrotate
# 可选:重启应用或通知进程重新打开日志
# systemctl restart your-node-app
endscript
}
sudo logrotate -f /etc/logrotate.d/nodejs,确认配置正确后,logrotate会通过cron定时任务自动运行。使用Node.js日志库内置轮转
winston-daily-rotate-file,配置示例:const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const logger = winston.createLogger({
transports: [
new DailyRotateFile({
filename: 'application-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '100m',
maxFiles: '30d'
})
]
});
dateFile类型的appender,设置pattern和numBackups参数实现轮转。使用PM2日志管理
sudo npm install pm2 -gpm2 install pm2-logrotate,配置参数:pm2 set pm2-logrotate:max_size 100M # 单个文件最大100MB
pm2 set pm2-logrotate:retain 30 # 保留30个文件
pm2 set pm2-logrotate:compress true # 压缩旧日志
手动脚本归档
backup_logs.sh),定期压缩备份日志文件并清理旧文件,通过cron定时执行:#!/bin/bash
LOG_DIR="/path/to/logs"
BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d)
tar -czf "$BACKUP_DIR/logs_$DATE.tar.gz" -C "$LOG_DIR" ./*.log
find "$LOG_DIR" -name "*.log" -mtime +30 -exec rm {} \;
crontab -e,添加0 2 * * * /path/to/backup_logs.sh(每天凌晨2点执行)。选择建议:优先使用logrotate(系统级工具,无需修改应用代码)或winston/log4js(应用级控制,灵活性高),根据实际需求选择轮转周期、压缩方式和保留策略。