在 Debian 上 Node.js 日志过大,通常可以从日志管理、应用配置、系统工具三个层面解决。下面给你一套实用方案。
先看看日志到底在哪、是谁写的:
# 常见位置
/var/log/
~/.pm2/logs/
/var/log/nginx/ # 如果前面有 nginx
项目目录下的 logs/
# 查看大文件
du -sh /var/log/*
find / -name "*.log" -size +100M
常见来源:
如果是自己写文件日志,用 winston + winston-daily-rotate-file:
const { createLogger, transports } = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
createLogger({
transports: [
new DailyRotateFile({
filename: 'logs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
})
]
});
✅ 自动按天 / 大小切割
✅ 自动删除旧日志
生产环境不要开 debug:
logger.level = 'info'; // 不要 debug / verbose
sudo nano /etc/logrotate.d/node-app
示例:
/var/www/myapp/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
copytruncate
}
sudo logrotate -d /etc/logrotate.d/node-app
sudo logrotate -f /etc/logrotate.d/node-app
✅ 适合 PM2 / 原生 Node 写文件日志
pm2 start app.js --log-date-format "YYYY-MM-DD HH:mm" \
--max-size 10M \
--retain 7
或全局配置:
pm2 set pm2:max-size 10M
pm2 set pm2:retain 7
清理旧日志:
pm2 flush
如果你用 systemd 启动 Node:
journalctl -u node-app
限制大小:
sudo nano /etc/systemd/journald.conf
SystemMaxUse=200M
SystemKeepFree=100M
MaxFileSec=7day
生效:
sudo systemctl restart systemd-journald
清理:
sudo journalctl --vacuum-size=100M
# 清空大日志(不删文件)
: > /var/www/myapp/logs/app.log
# 或
truncate -s 0 app.log
⚠️ 不要直接 rm,可能导致进程写错文件
✅ Node + winston-daily-rotate-file
✅ + logrotate 兜底
✅ + journalctl 限额
✅ + 生产环境 info 级别
如果你愿意,可以告诉我:
我可以直接给你可复制的配置。