Debian 上 Node.js 日志过大通常不是 Node.js 本身的问题,而是日志策略、应用写法或系统配置导致的。下面按常见原因 → 排查方法 → 解决方案来说明。
Node.js 应用(如 PM2、Docker、systemd)持续往同一个日志文件写,没有:
✅ 结果:
app.log / pm2 logs / combined.log 越来越大
例如:
debug / sillylogger.debug('request body:', req.body)
logger.debug('query:', req.query)
✅ 结果:
高并发下日志量爆炸
try {
...
} catch (e) {
console.error(e);
console.error(e.stack);
}
或:
PM2 默认:
pm2 logs 一直追加路径通常是:
~/.pm2/logs/
如果 Node.js 是通过 systemd 启动:
StandardOutput=journal
StandardError=journal
journald 默认可能 不限制大小
例如:
node app.js > app.log 2>&1
没有 logrotate
du -sh /var/log/*
du -sh ~/.pm2/logs/*
journalctl --disk-usage
检查是否使用:
winstonpinomorganconsole.log重点看:
pm2 logs
pm2 flush # 清空日志(临时)
journalctl -u your-node-service --no-pager | head
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
编辑 service:
[Service]
StandardOutput=append:/var/log/node/app.log
StandardError=append:/var/log/node/error.log
配合 logrotate:
/var/log/node/*.log {
daily
rotate 7
compress
missingok
notifempty
}
生产环境:
logger.level = 'info';
避免:
console.log(JSON.stringify(req))
推荐:
示例(Winston):
new winston.transports.DailyRotateFile({
filename: 'app-%DATE%.log',
maxSize: '20m',
maxFiles: '14d'
})
journalctl --vacuum-size=200M
或编辑:
/etc/systemd/journald.conf
SystemMaxUse=200M
Debian 上 Node.js 日志过大的根本原因通常是:日志没有轮转 + 日志级别不合理。
如果你愿意,可以把下面信息发我,我可以给你精确方案:
我可以直接帮你写 logrotate / PM2 / systemd 配置。