清理Node.js日志文件是维护服务器或应用健康的重要操作。以下是详细的解决方案,涵盖不同场景和工具:
# 删除单个日志文件
rm /path/to/your/app.log
# 删除目录下所有.log文件
rm /var/log/nodejs/*.log
# 清空文件内容(适用于仍在写入的日志)
> /path/to/your/app.log
logrotate
(Linux系统推荐)创建配置文件 /etc/logrotate.d/nodejs
:
/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 644 root root
sharedscripts
postrotate
systemctl restart your-node-service.service >/dev/null 2>&1 || true
endscript
}
daily/weekly/monthly
:轮转频率rotate 7
:保留7份历史日志compress
:启用gzip压缩旧日志create
:轮转后重建日志文件const fs = require('fs');
const path = '/var/log/nodejs';
// 删除7天前的日志
fs.readdir(path, (err, files) => {
files.forEach(file => {
if (file.endsWith('.log')) {
const filePath = `${path}/${file}`;
const stats = fs.statSync(filePath);
const ageInDays = (Date.now() - stats.mtime) / (1000 * 3600 * 24);
if (ageInDays > 7) {
fs.unlinkSync(filePath);
console.log(`Deleted: ${filePath}`);
}
}
});
});
定时执行:通过cron
设置每天运行:
0 0 * * * /usr/bin/node /path/to/cleanup-script.js
Winston + DailyRotateFile
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.DailyRotateFile({
filename: 'app-%DATE%.log',
dirname: '/var/log/nodejs',
maxSize: '20m',
maxFiles: '14d'
})
]
});
PM2日志管理
# 清空所有PM2日志
pm2 flush
# 配置PM2日志轮转
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 100M
pm2 set pm2-logrotate:retain 30
# 清理容器日志(需重启容器)
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
# 限制日志大小(docker-compose示例)
services:
node-app:
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "3"
df -h
+ cron
)。根据您的具体环境(服务器/容器/本地开发)选择最适合的方案。对于生产环境,强烈推荐使用logrotate
或日志库的内置轮转功能。