在 Debian 上 Node.js 日志太大,一般可以从 日志轮转、应用层控制、系统级清理、运维手段 几个方面处理。下面按实用程度给你一套方案。
如果你的日志是直接写到文件(如 app.log),首选 logrotate。
sudo nano /etc/logrotate.d/nodejs
示例(假设日志在 /var/log/nodejs/):
/var/log/nodejs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
}
说明:
daily:每天轮转rotate 7:保留 7 份compress:压缩旧日志copytruncate:不重启 Node 也能截断日志(常用)sudo logrotate -d /etc/logrotate.d/nodejs # 模拟
sudo logrotate -f /etc/logrotate.d/nodejs # 强制
不要 console.log 写文件。
npm install winston winston-daily-rotate-file
const winston = require('winston');
require('winston-daily-rotate-file');
const transport = new winston.transports.DailyRotateFile({
dirname: '/var/log/nodejs',
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxFiles: '7d',
maxSize: '20m'
});
const logger = winston.createLogger({
transports: [transport]
});
✅ 自动按天 / 大小切割
✅ 不用手动清理
PM2 自带日志管理:
pm2 logs
pm2 flush # 清空日志
pm2 start app.js --log-size 10M --log-date-format "YYYY-MM-DD HH:mm"
或:
pm2 set pm2:log:max-size 10M
/etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
重启 Docker:
sudo systemctl restart docker
# 查看大日志
du -sh /var/log/nodejs/*
# 清空(不删文件)
: > /var/log/nodejs/app.log
或:
find /var/log/nodejs -name "*.log" -mtime +7 -delete
常见原因:
debug✅ 建议:
info / warn / error| 场景 | 推荐 |
|---|---|
| 直接文件日志 | logrotate |
| Node 应用 | winston / pino |
| PM2 | pm2 log 限制 |
| Docker | docker log opts |
如果你愿意,可以告诉我:
我可以直接帮你写配置。