使用logrotate工具(系统级推荐)
logrotate是Ubuntu系统自带的日志管理工具,专为日志轮转、压缩、删除设计,能有效防止Node.js日志文件无限增长。配置步骤如下:
sudo apt-get install logrotate。/etc/logrotate.d/目录下新建nodejs-app文件(如sudo nano /etc/logrotate.d/nodejs-app),添加以下内容(根据实际路径调整):/path/to/your/nodejs/app/logs/*.log {
daily # 每天轮转
rotate 7 # 保留最近7天的日志
compress # 压缩旧日志(节省空间)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
create 0640 root adm # 新建日志文件的权限和属主
}
sudo logrotate -f /etc/logrotate.d/nodejs-app(强制立即执行,验证配置是否正确)。通过Node.js日志库内置轮转(应用级集成)
在Node.js应用中集成日志库(如winston),实现日志轮转与应用生命周期绑定,避免依赖外部工具。以winston-daily-rotate-file为例:
npm install winston winston-daily-rotate-file。logger.js):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', // 日志文件名模板(%DATE%会被替换为日期)
datePattern: 'YYYY-MM-DD', // 日期格式(每天一个文件)
zippedArchive: true, // 压缩旧日志
maxSize: '20m', // 单个日志文件最大20MB(超过则轮转)
maxFiles: '14d' // 保留最近14天的日志
})
]
});
module.exports = logger;
这种方式无需修改系统配置,适合需要与应用一起部署的场景,且支持更灵活的日志格式(如JSON)。
结合systemd定时任务(自动化清理)
若使用systemd管理Node.js应用,可通过systemd定时任务定期执行清理脚本,实现自动化。步骤如下:
/usr/local/bin/clean-nodejs-logs.sh):#!/bin/bash
LOG_DIR="/path/to/your/nodejs/app/logs"
find "$LOG_DIR" -type f -name "*.log" -mtime +7 -exec rm -f {} \; # 删除7天前的.log文件
sudo chmod +x /usr/local/bin/clean-nodejs-logs.sh。/etc/systemd/system/clean-nodejs-logs.timer):[Unit]
Description=Daily cleanup of Node.js logs older than 7 days
[Timer]
OnCalendar=daily # 每天执行
Persistent=true # 若错过执行时间,下次启动时补执行
[Install]
WantedBy=timers.target
/etc/systemd/system/clean-nodejs-logs.service):[Unit]
Description=Clean Node.js logs
[Service]
Type=oneshot
ExecStart=/usr/local/bin/clean-nodejs-logs.sh
sudo systemctl enable clean-nodejs-logs.timer
sudo systemctl start clean-nodejs-logs.timer
systemd定时任务能确保清理操作按时执行,适合需要严格遵循系统计划的场景。
利用pm2的日志轮转功能(进程管理集成)
若使用pm2管理Node.js进程,可通过pm2内置的日志轮转功能简化管理。步骤如下:
npm install pm2 -g。ecosystem.config.js):module.exports = {
apps: [{
name: 'my-node-app',
script: 'app.js',
out_file: '/path/to/your/nodejs/app/logs/out.log', // 标准输出日志路径
error_file: '/path/to/your/nodejs/app/logs/err.log', // 错误输出日志路径
log_date_format: 'YYYY-MM-DD HH:mm Z', // 日志时间格式
log_rotation: {
period: '1d', // 每天轮转
rotateAfterSize: '10M', // 单个文件超过10MB时轮转
keepFiles: 7 // 保留7天的日志
}
}]
};
pm2 start ecosystem.config.js。日志级别管理与容量监控
除了清理,还需通过以下方式预防日志文件过度增长:
error或warn,开发环境用debug),避免记录不必要的信息(如logger.level = process.env.NODE_ENV === 'production' ? 'error' : 'debug')。df -h查看磁盘使用情况,du -sh /path/to/logs查看日志目录大小,若日志占比过高,及时调整轮转策略(如减少maxFiles或增大maxSize)。