在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应用程序的日志文件,确保系统的稳定性和可维护性。