在 Debian 上“分割 Node.js 日志”通常指 防止日志文件无限增长,常见做法有三类:日志库自带轮转、系统 logrotate、PM2 自带轮转。下面按常见场景给你一套实用方案。
logrotate(推荐 ✅)适合:
logs/app.log)dpkg -l | grep logrotate
如果没有:
sudo apt update
sudo apt install logrotate
sudo nano /etc/logrotate.d/node-app
示例配置:
/var/log/node/app.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 node node
copytruncate
}
| 参数 | 作用 |
|---|---|
| daily | 每天轮转 |
| rotate 7 | 保留 7 份 |
| compress | 压缩旧日志 |
| copytruncate | 不重启 Node.js 也能生效 |
| create | 新建日志文件权限 |
sudo logrotate -d /etc/logrotate.d/node-app
如果你用 Winston(最常用):
npm 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({
level: 'info',
transports: [
transport,
new winston.transports.Console()
]
});
logger.info('Hello Node.js log');
✅ 自动生成:
logs/app-2026-01-21.log
logs/app-2026-01-20.log
npm install -g pm2
pm2 start app.js --name my-app
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
✅ PM2 会自动处理:
~/.pm2/logs/my-app-out.log
~/.pm2/logs/my-app-out__2026-01-21.log
如果你用 systemd 启动 Node.js:
[Service]
ExecStart=/usr/bin/node /opt/app/app.js
StandardOutput=append:/var/log/node/app.log
StandardError=append:/var/log/node/error.log
然后配合 logrotate 即可。
| 场景 | 推荐 |
|---|---|
| 普通 Debian 服务器 | logrotate |
| 使用 PM2 | pm2-logrotate |
| 需要按天/大小精确控制 | Winston DailyRotate |
| 生产 Docker / systemd | logrotate + systemd |
❌ 不要直接 mv 日志文件
Node.js 仍占用旧 inode,日志不会写入新文件
✅ 正确方式:
copytruncate如果你愿意,可以告诉我:
我可以帮你定制一套最合适的日志分割方案。