使用logrotate工具(系统级自动化管理)
logrotate是Ubuntu系统自带的日志管理工具,可自动轮转、压缩、删除Node.js日志文件,无需修改应用代码。
sudo apt-get install logrotate安装。/etc/logrotate.d/目录下新建Node.js专属配置文件(如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强制轮转,验证配置是否生效。/etc/cron.daily/logrotate每日自动执行,无需额外配置。编写自定义Shell脚本(灵活定制清理逻辑)
通过Shell脚本可灵活定义清理规则(如按修改时间、文件大小),适合需要特殊清理逻辑的场景。
clean-nodejs-logs.sh,内容如下:#!/bin/bash
LOG_DIR="/path/to/your/nodejs/app/logs"
MAX_DAYS=7 # 保留最近7天的日志
find "$LOG_DIR" -type f -name "*.log" -mtime +$MAX_DAYS -exec rm -f {} \; # 删除超过MAX_DAYS天的.log文件
sudo chmod +x /usr/local/bin/clean-nodejs-logs.sh。crontab -e添加以下内容,实现每天凌晨1点自动清理:0 1 * * * /usr/local/bin/clean-nodejs-logs.sh
利用systemd定时任务(集成系统服务管理)
若Node.js应用通过systemd管理(如使用systemctl start node-app),可创建systemd定时任务实现日志清理。
/usr/local/bin/clean-nodejs-logs.sh并赋予执行权限。sudo nano /etc/systemd/system/clean-nodejs-logs.service,内容如下:[Unit]
Description=Clean Node.js logs older than 7 days
[Service]
ExecStart=/usr/local/bin/clean-nodejs-logs.sh
sudo nano /etc/systemd/system/clean-nodejs-logs.timer,内容如下:[Unit]
Description=Run clean-nodejs-logs daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
sudo systemctl daemon-reload、sudo systemctl enable clean-nodejs-logs.timer、sudo systemctl start clean-nodejs-logs.timer,定时任务将随系统启动自动运行。使用Node.js第三方日志库(应用层集成轮转)
通过第三方日志库(如winston-daily-rotate-file)在应用层实现日志轮转,适合需要与应用深度集成的场景(如按日志级别分开轮转)。
npm install winston-daily-rotate-file。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', // 日志文件名格式
datePattern: 'YYYY-MM-DD', // 按天分割
zippedArchive: true, // 压缩旧日志
maxSize: '20m', // 单个日志文件最大20MB
maxFiles: '14d' // 保留最近14天的日志
})
]
});
logger.info('This log will be rotated daily and compressed.');
此配置会自动按天分割日志文件,压缩旧日志并保留14天,无需额外系统级配置。手动清理临时日志(快速释放空间)
若需立即释放磁盘空间,可通过手动命令删除指定目录下的日志文件(谨慎使用,避免误删正在使用的日志)。
cd /path/to/your/nodejs/app/logs。rm -f *.log(强制删除所有.log文件)。find . -type f -name "*.log" -mtime +30 -exec rm -f {} \;(删除30天前的.log文件)。