在 Linux 上 Node.js 日志过大 通常不是 Node 本身的问题,而是日志写入方式 + 运行环境 + 配置造成的。下面按常见原因给你一个系统梳理。
这是 90% 日志爆炸的根因。
例如:
node app.js >> app.log 2>&1
一个月后:
app.log 12G
✅ 解决:
logrotateNode 在生产环境常见错误:
console.log(req, res, user, token)
问题:
✅ 建议:
console.log例如:
setInterval(() => {
doSomething() // 抛错
}, 10)
结果:
Error: xxx
at ...
Error: xxx
at ...
✅ 解决:
process.on('uncaughtException')process.on('unhandledRejection')常见错误配置(winston 示例):
new transports.File({ filename: 'app.log' })
问题:
maxsizemaxFiles✅ 正确示例:
new transports.File({
filename: 'app.log',
maxsize: 10 * 1024 * 1024,
maxFiles: 5,
tailable: true
})
PM2 默认:
~/.pm2/logs/app-out.log
~/.pm2/logs/app-error.log
如果不配置:
✅ 解决:
pm2 install pm2-logrotate
或:
pm2 start app.js --log-date-format "YYYY-MM-DD HH:mm:ss"
在容器中:
结果:
/var/lib/docker/containers/xxx/json.log 20G
✅ 解决:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
典型错误:
logger.info(req.body)
如果上传文件是 base64:
✅ 建议:
# 看哪个日志最大
du -sh /var/log/*
du -sh ~/.pm2/logs/*
# 实时看增长速度
tail -f app.log
✅ 日志库
✅ 轮转
✅ 级别控制
if (process.env.NODE_ENV === 'production') {
logger.level = 'warn'
}
你可以直接贴:
我可以帮你 精准给出配置示例。