在 Debian 上,Node.js 本身不自带日志分割功能,日志分割通常由外部工具或日志库来完成。下面按常见场景给你几种成熟、可落地的做法,从简单到生产级。
pm2 自带日志分割 ✅(最常用)如果你用 pm2 管理 Node.js 进程,这是最简单、最稳定的方案。
npm install -g pm2
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true
含义:
max_size:单个日志超过 10MB 就分割retain:保留最近 7 个日志compress:启用 gzip 压缩~/.pm2/logs/
✅ 优点
logrotate(系统级方案) ✅适合不用 pm2、直接 systemd / 原生启动 Node.js 的情况。
/var/log/node/app.log
sudo nano /etc/logrotate.d/node-app
内容示例:
/var/log/node/app.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
| 参数 | 说明 |
|---|---|
| daily | 每天切割 |
| rotate 7 | 保留 7 份 |
| compress | gzip 压缩 |
| copytruncate | 不重启进程直接切割 |
✅ 优点
winston + winston-daily-rotate-filenpm install winston winston-daily-rotate-file
const winston = require('winston');
const { DailyRotateFile } = require('winston-daily-rotate-file');
const transport = new DailyRotateFile({
dirname: 'logs',
filename: 'app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
});
const logger = winston.createLogger({
transports: [transport]
});
logger.info('hello world');
✅ 适合
⚠️ 缺点
如果你在 Docker 中运行 Node.js:
✅ 不要自己分割日志
docker logs
配合:
| 场景 | 推荐方案 |
|---|---|
| pm2 管理 Node.js | ✅ pm2-logrotate |
| systemd / 原生启动 | ✅ logrotate |
| 容器 | ✅ stdout + 日志系统 |
| 小项目 | ✅ winston 分割 |
如果你愿意,可以告诉我:
我可以帮你直接写一份可用的完整配置。